Skip to main content
 首页 » 编程设计

python之为什么在 Python 路径中需要 4 个反斜杠

2025年05月04日11wuhuacong

当我使用 Python 3 通过 subprocess.call() 启动程序时,为什么路径中需要 4 个反斜杠?

这是我的代码:

cmd = 'C:\\\\Windows\\\\System32\\\\cmd.exe' 
 
cmd = shlex.split(cmd) 
 
subprocess.call(cmd) 

当我使用任务管理器检查启动的 cmd.exe 实例的命令行时,它正确显示了路径,每个路径只有一个反斜杠分隔。


因此,我需要在 Windows 上使用它来使路径正常工作:

if platform.platform().startswith('Windows'): 
    cmd = cmd.replace(os.sep, os.sep + os.sep) 

有没有更优雅的解决方案?

请您参考如下方法:

部分问题是您正在使用 shlex,它实现了 Unix-ish shell 使用的转义规则。但是您在 Windows 上运行,其命令外壳使用不同的规则。这说明了需要双反斜杠的一个级别(即,绕过 shlex 做的一些你不需要开始的事情)。

您使用的是常规字符串而不是原始字符串 (r"...") 说明了需要双反斜杠的另一个级别,并且 2*2 = 4。QED ;-)

这在 Windows 上运行良好:

cmd = subprocess.call(r"C:\Windows\System32\cmd.exe") 

顺便说一下,仔细阅读 subprocess.Popen() 的文档:Windows CreateProcess() API 调用需要一个字符串一个论点。当您改为传递序列时,Python 会尝试通过文档中解释的规则将该序列转换为字符串。如果可行,最好 - 在 Windows 上 - 直接传递你想要的字符串。