情况:我目前正在使用 paramiko 做一些花哨的 sftp 东西,并且经常发现自己正在为远程文件编译路径名。我认为可能有一种更智能的方法来做到这一点。问题:python 中有没有一种方法可以对不是您当前操作系统的操作系统使用 os.path 操作?我希望最终能够去remotehost.os.path。“一些操作”
问问题
1091 次
2 回答
6
正如文档顶部的大注释所说:
由于不同的操作系统有不同的路径名约定,标准库中有这个模块的几个版本。os.path 模块始终是适用于 Python 运行的操作系统的路径模块,因此可用于本地路径。但是,如果您想操作始终采用其中一种不同格式的路径,您也可以导入和使用各个模块。它们都有相同的界面:
- 用于 UNIX 样式路径的 posixpath
- ntpath 用于 Windows 路径
- macpath 用于旧式 MacOS 路径
- os2emxpath 用于 OS/2 EMX 路径
显然,诸如此类ntpath.lexists
的东西不会在 POSIX 系统上运行,但诸如join
,basename
等之类的东西会。
如果您不知道远程服务器期望什么格式,并且没有任何办法弄清楚,posixpath
通常是一个安全的选择。sftp
和 Paramiko 的类似功能,将始终处理 POSIX 路径;如果您使用的是ssh
shell,cmd.exe
那么您想要运行的许多命令行工具(包括 Python 脚本)将能够在 Windows 上处理它们,对于 OS/2 也是如此,当然还有旧的-style Mac 甚至没有你可以使用的外壳ssh
。
于 2013-07-15T21:35:46.663 回答
0
建议你好好看看fabric
。
- 它正在利用
paramiko
低级的东西(传输/ssh/sftp)。 Task
它是运行, 或自动化的一个很好的选择。- 他们正在研究远程执行挂钩(未解决的问题)。
execnet
,pushy
,pyro
... 和其他并行处理库。
在后台,fabric
使用posixpath.join()
,因为Windows 确实支持/
作为目录分隔符。他们遇到了与您相同的问题,并且在此提交中从更改os.path.join
为posixpath.join()
。
特点fabric
:
于 2013-07-15T21:48:32.177 回答