2

我似乎subprocess.Popen()在 Windows XP x64 机器上发现了一个问题。如果Popen()使用 调用Shell=True,而不是创建子进程,则会出现错误

The syntax of the command is incorrect

打印到命令提示符。

尝试在命令行上使用 Mercurial 时发现了该问题。'hg resolve' 会因上述错误而崩溃。我已将其缩小为 Popen() 的问题,并制作了一个 <10 行的脚本来重现该问题。这个问题也存在于各种地方的 tortoisehg 中,也是因为它使用了Popen()with Shell=True

有趣的是,如果我使用 Shell=False 运行我的测试代码,它可以正常工作(发生预期的行为)。Shell=True我已经在 Windows x86 版本上测试了代码,并且两者都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)
4

0 回答 0