我似乎在Windows XP x64计算机上发现了subprocess.Popen()
的问题。如果使用Popen()
调用Shell=True
,而不是创建子进程,则会出现错误
The syntax of the command is incorrect
打印到命令提示符。
尝试在命令行上使用Mercurial时发现了问题。 'hg resolve'会因上述错误而崩溃。我已经将它缩小到Popen()的一个问题,并制作了一个< 10行脚本来重现这个问题。问题也存在于各种各样的地方,也是因为Popen()
与Shell=True
一起使用。
有趣的是,如果我使用Shell = False运行我的测试代码,它可以正常工作(预期的行为发生)。我已经在Windows x86版本上测试了代码,并使用了Shell=True
和& False
它按预期工作。这个特定的机器对PATH有一些自定义,但没有什么严重的。
是否有人知道这台x64机器可能会有什么不同导致此错误。在我上班之前,机器已经安装/设置,所以我不确定已经改变了什么。到目前为止我唯一的想法是由于参数的错误转义(或相关的东西)而发生了一些错误,但是我不确定这可能发生在哪里。
仅出于提供信息的目的,我已将Mercurial的一个电话发布到Popen
,以防有人发现可能存在的问题
p = subprocess.Popen(cmd, shell=True, bufsize=-1,
close_fds=closefds,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
universal_newlines=newlines,
env=env)
不幸的是我现在无法发布测试代码(它正在工作),但是我会在获得更新时发布更新。
更新,测试代码如下......
import os
import sys
import subprocess
if 'THG_HGTK_SPAWN' in os.environ:
print 'spawn successful'
sys.exit(0)
os.environ['THG_HGTK_SPAWN'] = '1'
subprocess.Popen(args={'python', r'test.py'}, shell=True)
print 'spawning...'
sys.exit(0)