What is the best way to map windows drives using Python?

后端 未结 7 1599
孤城傲影
孤城傲影 2020-11-28 05:08

What is the best way to map a network share to a windows drive using Python? This share also requires a username and password.

7条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-28 05:26

    Assuming that you import necessary libraries, This was a part of an RPC server where the client requested the server to map a drive locally...

    #Small function to check the availability of network resource.
    def isAvailable(path):
        winCMD = 'IF EXIST ' + path + ' echo YES'
        cmdOutPut = subprocess.Popen(winCMD, stdout=subprocess.PIPE, shell=True).communicate()
        return string.find(str(cmdOutPut), 'YES',)
    
    #Small function to check if the mention location is a directory
    def isDirectory(path):
        winCMD = 'dir ' + path + ' | FIND ".."'
        cmdOutPut = subprocess.Popen(winCMD, stdout=subprocess.PIPE, shell=True).communicate()
        return string.find(str(cmdOutPut), 'DIR',)
    

    ================Check the white spaces from here, these were a part of a function============

    def mapNetworkDrive(self, drive, networkPath, user, password):
    
        #Check for drive availability
        if isAvailable(drive) > -1:
            #Drive letter is already in use
            return -1
    
        #Check for network resource availability
        if isAvailable(networkPath) == -1:
            print "Path not accessible: ", networkPath
            #Network path is not reachable
            return -1
    
        #Prepare 'NET USE' commands
        winCMD1 = 'NET USE ' + drive + ' ' + networkPath
        winCMD2 = winCMD1 + ' ' + password + ' /User' + user
    
        print "winCMD1 = ", winCMD1
        print "winCMD2 = ", winCMD2
        #Execute 'NET USE' command with authentication
        winCMD = winCMD2
        cmdOutPut = subprocess.Popen(winCMD, stdout=subprocess.PIPE, shell=True).communicate()
        print "Executed: ", winCMD
        if string.find(str(cmdOutPut), 'successfully',) == -1:
            print winCMD, " FAILED"
            winCMD = winCMD1
            #Execute 'NET USE' command without authentication, incase session already open
            cmdOutPut = subprocess.Popen(winCMD, stdout=subprocess.PIPE, shell=True).communicate()
            print "Executed: ", winCMD
            if string.find(str(cmdOutPut), 'successfully',) == -1:
                print winCMD, " FAILED"
                return -1
            #Mapped on second try
            return 1
        #Mapped with first try
        return 1
    
    def unmapNetworkDrive(self, drive):
    
        #Check if the drive is in use
        if isAvailable(drive) == -1:
            #Drive is not in use
            return -1
    
        #Prepare 'NET USE' command
        winCMD = 'net use ' + drive + ' /DELETE'
        cmdOutPut = subprocess.Popen(winCMD, stdout=subprocess.PIPE, shell=True).communicate()
        if string.find(str(cmdOutPut), 'successfully',) == -1:
            #Could not UN-MAP, this might be a physical drive
            return -1
        #UN-MAP successful
        return 1
    

提交回复
热议问题