Что лучший способ состоит в том, чтобы подключить диски окон с помощью Python?

Что, если необходимо масштабировать приложение выравниванием нагрузки больше чем один веб-сервер? Вы могли установить полное приложение на всех веб-серверах, но лучшее решение состоит в том, чтобы иметь веб-серверы, говорят с сервером приложений.

, Но при отсутствии объектов объекта, у них не будет очень многого для разговора о.

я не говорю, что Вы не должны писать монолиты, если это - простое, внутреннее, короткое жизненное приложение. Но как только это становится умеренно сложным, или это должно продлиться существенное количество времени, действительно необходимо думать о хорошем дизайне.

Это экономит время когда дело доходит до поддержания его.

Путем разделения прикладной логики от логики представления и доступа к данным, и путем передачи DTOs между ними, Вы отделяете их. Разрешение им измениться независимо.

25
задан Gary Willoughby 13 August 2009 в 11:09
поделиться

5 ответов

Я бы выбрал IronPython и эту статью: Программное сопоставление буквы диска . Или вы можете напрямую использовать Win32 API.

2
ответ дан 28 November 2019 в 21:23
поделиться

Вот пара ссылок, которые показывают использование модуля win32net, который должен обеспечивать необходимую вам функциональность.

http: / /docs.activestate.com/activepython/2.4/pywin32/html/win32/help/win32net.html http://www.blog.pythonlibrary.org/?p=20

3
ответ дан 28 November 2019 в 21:23
поделиться

У меня нет сервера для тестирования здесь, дома, но, может быть, вы могли бы просто использовать модуль подпроцесса стандартной библиотеки для выполнения соответствующей команды NET USE?

Глядя на NET HELP ИСПОЛЬЗОВАНИЕ из командной строки Windows, похоже, вы должны иметь возможность ввести и пароль, и идентификатор пользователя в команде net use для сопоставления диска.

Быстрый тест в интерпретаторе чистой команды net use без сопоставление материалов:

>>> import subprocess
>>> subprocess.check_call(['net', 'use'])
New connections will be remembered.

There are no entries in the list.

0
>>>
3
ответ дан 28 November 2019 в 21:23
поделиться

Предполагая, что вы импортируете необходимые библиотеки, это была часть RPC-сервера, где клиент запросил сервер для локального подключения диска ...

#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',)

======== ======== Отсюда проверьте пробелы, они были частью функции ============

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
3
ответ дан 28 November 2019 в 21:23
поделиться

Хорошо, вот еще один метод ...

Этот был после прохождения Win32Wnet. Дайте мне знать, что вы думаете ...

def mapDrive(drive, networkPath, user, password, force=0):
    print networkPath
    if (os.path.exists(drive)):
        print drive, " Drive in use, trying to unmap..."
        if force:
            try:
                win32wnet.WNetCancelConnection2(drive, 1, 1)
                print drive, "successfully unmapped..."
            except:
                print drive, "Unmap failed, This might not be a network drive..."
                return -1
        else:
            print "Non-forcing call. Will not unmap..."
            return -1
    else:
        print drive, " drive is free..."
    if (os.path.exists(networkPath)):
        print networkPath, " is found..."
        print "Trying to map ", networkPath, " on to ", drive, " ....."
        try:
            win32wnet.WNetAddConnection2(win32netcon.RESOURCETYPE_DISK, drive, networkPath, None, user, password)
        except:
            print "Unexpected error..."
            return -1
        print "Mapping successful"
        return 1
    else:
        print "Network path unreachable..."
        return -1

и отключить, просто используйте ....

def unmapDrive(drive, force=0):
    #Check if the drive is in use
    if (os.path.exists(drive)):
        print "drive in use, trying to unmap..."
        if force == 0:
            print "Executing un-forced call..."
        try:
            win32wnet.WNetCancelConnection2(drive, 1, force)
            print drive, "successfully unmapped..."
            return 1
        except:
            print "Unmap failed, try again..."
            return -1
    else:
        print drive, " Drive is already free..."
        return -1
7
ответ дан 28 November 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: