【发布时间】:2019-11-08 11:44:20
【问题描述】:
我正在使用 MacOS 开发 Python2.7 应用程序,该应用程序使用 paramiko 连接到远程 linux 机器。现在,我把我早期的代码给一个微软Windows用户测试,马上就遇到了os.path.join默认在路径中使用\作为分隔符的问题,当应用程序调用远程执行的命令时机器。所以,我必须确保在linux上进行操作时使用正确的分隔符,而在本地机器上使用默认的分隔符。
我认为这里最简单的解决方案是定义我自己的 joinpath 函数,该函数始终使用 / 作为分隔符,并在远程操作时调用此函数。
def joinpath(*args):
return "/".join(args)
或者有没有更好更通用的方法来处理这种情况?
【问题讨论】:
-
你加入什么路径?为什么不用 Python 的路径连接?
-
使用
os.path.join会产生类似/home/user\software的结果,当路径指向远程Linux 计算机上的某个东西时会出错。 -
举一个导致这种情况的
args的例子。我认为在传递之前,您的字符串中有一些斜杠或反斜杠。 (例如,“/home/user”和“software”当然会以/home/user\software的形式加入,但os.path.join不是问题,而是你的论点!) -
"os.path.join 默认使用 \ 作为路径中的分隔符,当应用程序在 linux 机器上运行时" - 不可能,因为代码在 Linux 上运行,Python 将使用 Linux然后分隔符。没关系,那是一台远程机器(我什至检查了它,因为我有一台带有 ssh 的 Windows 机器到一台目前打开 Python 解释器的 Linux 机器:P)。
-
相信我,参数中没有反斜杠。使用
paramiko的示例:with self.sftp_client.open(os.path.join(workdir, jobname+ext)) as f:。这是从 Windows 计算机调用的,但 sftp 客户端会在远程 linux 计算机上打开一个文件。所以windows分隔符是用来加入为linux机器做路径的。
标签: python windows python-2.7 path cross-platform