subprocess.Popen()和Shell = True导致错误'命令的语法不正确'

时间:2010-08-04 21:18:24

标签: python shell path windows-xp command-prompt

我似乎在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)

0 个答案:

没有答案