在 python 代码中使用 os 模块时处理远程文件夹?

Dealing with remote folders while using the os module in a python code?

我写了一个小程序,广泛使用了os模块,特别是os.walkos.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.walkos.remove、[=23 的细节吗? =] 提供?如果我做不到,那么我将不得不大量重写程序,这不是我想要的。

PS:这个问题的目的是找出如何使用相同的代码来处理远程文件夹. paramiko 等工具处理实现细节(例如文件在哪里等),因此我们将不得不重新编写程序。在本地挂载远程文件的想法和使用 os 的能力真的很好很强大。

很抱歉让你失望了,但情况确实和你问题中描述的一模一样:

是的,如果您想使用 os.walkos.removeshutil.move 等,您确实需要挂载远程目录

如果您使用专门的 SFTP 库,例如 paramiko(或通过 subprocess 模块调用 ssh/sftp),则必须实现 os.walk 靠自己。

顺便说一下,如果您决定在 paramiko 的基础上实现自己的 os.walk,您可能希望将该功能回馈给 paramiko,因为它可能会有所帮助也适用于该库的其他用户。

正如@vog 的回答已经说过的那样,您不能对 SFTP 使用 os.* 函数,除非您将远程文件系统挂载到本地文件系统。


唯一的其他方法是使用一些 Python SFTP 客户端库。

pysftp library, which is a more Pytonish wrapper around Paramiko library. And pysftp has walktree method:

walktree(remotepath, fcallback, dcallback, ucallback, recurse=True)