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"])
我在 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"])