【发布时间】:2015-02-02 05:18:11
【问题描述】:
运行以下脚本时:
import os
import sys
import subprocess
if len(sys.argv) > 1:
print sys.argv[1]
sys.exit(0)
commandline = [sys.executable]
commandline.append(os.path.realpath(__file__))
commandline.append('"test"')
p = subprocess.Popen(commandline)
p.wait()
p = subprocess.Popen(" ".join(commandline))
p.wait()
它返回以下输出
"test"
test
为什么提供参数列表或一个字符串之间存在差异? 这是在 Windows 机器上运行的,您会在任务管理器中的命令上的引号前看到反斜杠。
我希望两次运行的结果相同。
编辑:
问题不在于自动转义空格(我发现这是程序员的责任),而是更多关于我的引号是否在进程命令行中被转义。
这是从 windows 任务管理器中提取的两个子进程:
一个不同的非 python 进程使用反斜杠解析第一个命令行,这会带来意想不到的行为。我怎样才能拥有它,以便我可以使用列表而不是在命令行上转义引号?
编辑2:
引号肯定是由python添加的。如果您运行以下命令:
import subprocess
commandline = ['echo']
commandline.append('"test"')
commandline.append('>')
commandline.append(r'D:\test1.txt')
p = subprocess.Popen(commandline, shell=True)
p.wait()
commandline = 'echo "test" > D:\\test2.txt'
p = subprocess.Popen(commandline, shell=True)
p.wait()
然后你会看到输出是
D:\test1.txt:
\"test\"
D:\test2.txt:
"test"
【问题讨论】:
标签: python python-2.7 subprocess quotes popen