Как скопировать файлы в сетевой путь или диск с помощью Python

Мой подобен этому вопросу.

Как скопировать файл с сетевого ресурса на локальный диск с переменными?

Единственной разницей является мой сетевой диск, имеет пароль, защищают с именем пользователя и паролем.

Я должен скопировать файлы в a Samba использование доли Python и проверьте его.

Если я вручную вхожу в систему в затем работах кода, но не входя в систему shutil команда не работает.

6
задан Community 23 May 2017 в 12:24
поделиться

1 ответ

Я бы попытался сопоставить общий ресурс с неиспользуемой буквой диска, вызвав команду NET USE с помощью os.system (при условии, что вы работаете в Windows):

os.system(r"NET USE P: \\ComputerName\ShareName %s /USER:%s\%s" % (password, domain_name, user_name))

После того, как вы сопоставили общий ресурс с буквой диска, вы можете использовать shutil.copyfile , чтобы скопировать файл на указанный диск. Наконец, вы должны размонтировать общий ресурс:

os.system(r"NET USE P: /DELETE")

Конечно, это работает только в Windows, и вам нужно будет убедиться, что буква диска P доступна. Вы можете проверить код возврата команды NET USE , чтобы узнать, успешно ли выполнено монтирование; в противном случае вы можете попробовать другую букву диска, пока не добьетесь успеха.

Поскольку две команды NET USE входят в пару, а вторая всегда должна выполняться при выполнении первой (даже если где-то между ними возникло исключение), вы можете заключить эти два вызова в оболочку в диспетчере контекста, если вы используете Python 2.5 или новее:

from contextlib import contextmanager

@contextmanager
def network_share_auth(share, username=None, password=None, drive_letter='P'):
    """Context manager that mounts the given share using the given
    username and password to the given drive letter when entering
    the context and unmounts it when exiting."""
    cmd_parts = ["NET USE %s: %s" % (drive_letter, share)]
    if password:
        cmd_parts.append(password)
    if username:
        cmd_parts.append("/USER:%s" % username)
    os.system(" ".join(cmd_parts))
    try:
        yield
    finally:
        os.system("NET USE %s: /DELETE" % drive_letter)

with network_share_auth(r"\\ComputerName\ShareName", username, password):
     shutil.copyfile("foo.txt", r"P:\foo.txt")
10
ответ дан 9 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

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