Работа с удаленными папками при использовании модуля OS в коде Python? - PullRequest
0 голосов
/ 11 июня 2018

Я написал небольшую программу, которая широко использует модуль os, особенно os.walk, os.remove и т. Д. Например,

def dump_folder(source, destination):
    """
    """
    # uses os.walk, shutil.move

def encrypt_folder(folder, recipient):
    """
    """
    # uses os.walk, os.remove

Теперь я хотел бы расширить эту программу для поддержкиSFTP папок.

Нужно ли монтировать папки локально, чтобы os.* работал?Например, в Windows я мог бы использовать win32net и сделать что-то вроде:

try:
    win32wnet.WNetAddConnection2(...drive, remote...)                                
except:
    pass

Если я собираюсь использовать такой инструмент, как paramiko, могу ли я заставить его работать с тем же кодом, не беспокоясьо деталях, которые os.walk, os.remove, shutil.move предоставляет?Если я не могу, тогда мне придется немного переписать программу, а это не то, чего я хочу.

PS: Цель этого вопроса - выяснить, как использовать тот же код для работы с удаленными папками .Такие инструменты, как paramiko, имеют дело с деталями реализации (например, где находится файл и т. Д.), Поэтому нам придется переписать программу.Идея монтирования удаленного файла локально и возможности использования os действительно хороша и мощна.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Как уже сказано в ответе @ vog, вы не можете использовать функции os.* для SFTP, если не смонтируете удаленную файловую систему на локальную.


Единственный другой способ - это использовать какой-нибудь PythonКлиентская библиотека SFTP.

Есть библиотека pysftp , которая является более Pytonish-оболочкой для библиотеки Paramiko.И у pysftp есть walktree метод :

walktree(remotepath, fcallback, dcallback, ucallback, recurse=True)
0 голосов
/ 11 июня 2018

Извините, что разочаровал вас, но ситуация действительно такая, как вы описали в своем вопросе:

Да, вам нужно смонтировать удаленный каталог, если вы хотите использовать os.walk, os.remove, shutil.move и т. Д.

Если вы используете специализированную библиотеку SFTP, такую ​​как paramiko (или вызываете ssh / sftp через модуль subprocess), вам придется реализовать функциональностьos.walk по своему усмотрению.

Кстати, если вы решите реализовать свой собственный os.walk поверх paramiko, вы можете захотеть добавить эту функцию обратно к paramiko, так как это можетбыть полезным для других пользователей этой библиотеки.

...