Subprocess.run 不适用于文件名包含空格的 Windows

Subprocess.run does not work on Windows with file names containing spaces

我在 Windows 10

中使用 Powershell
>>> import os, subprocess
>>> os.listdir('C:\Program Files') # works
>>> subprocess.run('ls C:\') # works
>>> subprocess.run('ls C:\Program Files') # Fails

我试过正斜杠、转义、'r' 来制作正则表达式、引号内的字符串,但似乎没有任何效果。

这在终端中也不起作用。您应该在子进程命令中引用文件路径:

subprocess.run('ls "C:\Program Files"')

这些引号中的所有内容都将被视为一个术语。

通过将命令作为单个字符串传递,您将把它留给 Python 以将命令分解为参数。您可以引用包含空格的参数,如@Kraigolas 所示,也可以自己分解命令并传递命令及其参数的 list。我赞成这种方法,因为它很容易与变量一起使用,而不必担心必须引用它们。

subprocess.run(["ls", r"C:\Program Files"])