我正在使用MacOS开发一个Python2.7应用程序,该应用程序使用paramiko
连接到远程Linux机器。现在,我将我的早期代码提供给Microsoft Windows 用户进行测试,并立即遇到了一个问题,即当应用程序调用要在远程计算机上执行的命令时,os.path.join
默认使用作为路径中的分隔符。因此,我必须确保在 Linux 上进行操作时使用正确的分隔符,同时在本地计算机上使用默认分隔符。
我认为这里最简单的解决方案是定义我自己的joinpath
函数,该函数始终使用/
作为分隔符,并在远程完成操作时调用此函数。
def joinpath(*args):
return "/".join(args)
还是有更好、更普遍的处理这种情况的方法?
当应用程序在 Linux 机器上运行时
这句话基本上意味着Python在Linux上运行。虽然这:
这是从 Windows 计算机调用的,但 sftp 客户端在远程 Linux 计算机上打开一个文件
实际上这就是这一切。
所以:
os
模块在您的操作系统(运行 Python 的地方)上运行,为您提供特定于操作系统的正确结果
SSH(包括 SFTP)服务器不提供它们使用的 CLI,包括分隔符。它们只是为您提供一个通用接口来连接(如果是SFTP,则处理文件传输),但其余的基本上是您的问题。- 我自己使用 Python 通过 ssh 处理网络设备,我不得不手动处理识别错误等,因为输出只有文本。
这意味着,如果您知道将仅连接到 Linux 计算机,请使用您的该联接(可能会添加更多内容,以防您的目录路径以"/"结尾 - 在您的情况下,这将导致路径中的"//")。
如果您要同时连接到 Windows 和 Linux,请执行回退 - 捕获错误(或在输出中手动找到它,我没有使用 paramiko ,所以我不知道它是如何处理它的),并使用另一个分隔符作为回退并记住它该会话。