在subprocess.run中努力反斜杠

时间:2019-12-08 16:20:14

标签: python-3.x

我试图在subprocess.run的Windows路径中使用反斜杠。我读过,输出转义了反斜杠,没什么好担心的。但是,看起来反斜杠实际上已传递给subprocess.run。我已经尝试了单v逃逸反斜杠的所有8个排列,使用r v no r和单v双引号,但是似乎都行不通。

我使用的是shell = True,因为文档说我应该使用内置在shell中的命令。

有人知道正确的咒语吗? 预先感谢。

这是我的尝试:


1.
subprocess.run(['dir C:\'], shell=True)

doesn't allow this

2.
subprocess.run(['dir C:\\'], shell=True)
'"dir C:\\"' is not recognized as an internal or external command,
operable program or batch file.
CompletedProcess(args=['dir C:\\'], returncode=1)

3. 
subprocess.run([r'dir C:\'], shell=True)

doesn't allow this

4.
subprocess.run([r'dir C:\\'], shell=True)
'"dir C:\\\\"' is not recognized as an internal or external command,
operable program or batch file.
CompletedProcess(args=['dir C:\\\\'], returncode=1)

5. 
subprocess.run(["dir C:\"], shell=True)

doesn't allow this

6.
subprocess.run(["dir C:\\"], shell=True)
'"dir C:\\"' is not recognized as an internal or external command,
operable program or batch file.
CompletedProcess(args=['dir C:\\'], returncode=1)

7.
subprocess.run([r"dir C:\"], shell=True)

doesn't allow this

8.
subprocess.run([r"dir C:\\"], shell=True)
'"dir C:\\\\"' is not recognized as an internal or external command,
operable program or batch file.
CompletedProcess(args=['dir C:\\\\'], returncode=1)



1 个答案:

答案 0 :(得分:0)

这有效:

import subprocess

subprocess.run('dir "C:/"', shell=True)

当您用单引号引起来时,似乎Windows不喜欢它(即使在CMD中也是如此)。当您给它加上双引号时,它确实喜欢它。因此,请使用单引号表示字符串,并使用双引号括住实际路径。此外,python(和Windows)不介意在路径中使用正斜杠而不是反斜杠。 是的,在这种情况下,您确实需要shell = True。只要有可能就尽量远离它!