3

情况:我目前正在使用 paramiko 做一些花哨的 sftp 东西,并且经常发现自己正在为远程文件编译路径名。我认为可能有一种更智能的方法来做到这一点。问题:python 中有没有一种方法可以对不是您当前操作系统的操作系统使用 os.path 操作?我希望最终能够去remotehost.os.path。“一些操作”

4

2 回答 2

6

正如文档顶部的大注释所说:

由于不同的操作系统有不同的路径名约定,标准库中有这个模块的几个版本。os.path 模块始终是适用于 Python 运行的操作系统的路径模块,因此可用于本地路径。但是,如果您想操作始终采用其中一种不同格式的路径,您也可以导入和使用各个模块。它们都有相同的界面:

  • 用于 UNIX 样式路径的 posixpath
  • ntpath 用于 Windows 路径
  • macpath 用于旧式 MacOS 路径
  • os2emxpath 用于 OS/2 EMX 路径

显然,诸如此类ntpath.lexists的东西不会在 POSIX 系统上运行,但诸如join,basename等之类的东西会。

如果您不知道远程服务器期望什么格式,并且没有任何办法弄清楚,posixpath通常是一个安全的选择。sftp和 Paramiko 的类似功能,将始终处理 POSIX 路径;如果您使用的是sshshell,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.joinposixpath.join()

特点fabric

于 2013-07-15T21:48:32.177 回答