Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
subprocess.poll的Python语法错误_Python_Windows_Subprocess - Fatal编程技术网

subprocess.poll的Python语法错误

subprocess.poll的Python语法错误,python,windows,subprocess,Python,Windows,Subprocess,我今天遇到了这个问题,并设法用这个小脚本存根重复了这个问题,在win7x64机器上运行Python2.7.6,但是在各种windows平台上使用更大的脚本中的可移植python出现了这个问题 from subprocess import PIPE, Popen from time import sleep class Test(object): def run_cmd(self, cmd, wait=True): p = Popen(cmd, stdin=PIPE, st

我今天遇到了这个问题,并设法用这个小脚本存根重复了这个问题,在win7x64机器上运行Python2.7.6,但是在各种windows平台上使用更大的脚本中的可移植python出现了这个问题

from subprocess import PIPE, Popen
from time import sleep
class Test(object):
    def run_cmd(self, cmd, wait=True):
        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
        if wait:
            p.communicate()
            return p
        else:
            return p
    def something(self):
        p = self.run_cmd('notepad', wait=False)
        import pdb; pdb.set_trace()
        while not p.poll():
            print 'process still running'
            sleep(10)
        print p.returncode, p.stdout, p.stderr
    def somethingelse(self):
        p = self.run_cmd('notepad')        
        print p.returncode, p.stdout, p.stderr

t = Test()
t.somethingelse()
t.something()
发生的情况是,somethingelse在前台启动一个进程,python脚本等待它退出并打印返回代码stdout和stderr,但在第二个调用中,启动了某个进程,但无论是否结束该进程,python都会停留在循环中。然后我添加了pdb步骤,这是输出

>>> t.something()
> <stdin>(12)something()
(Pdb) print p
<subprocess.Popen object at 0x0000000002D73D68>
(Pdb) p.poll()
*** SyntaxError: SyntaxError('invalid syntax', ('<string>', 1, 1, '.poll()'))
(Pdb)
t.某物 >(12)某物 (Pdb)打印p (Pdb)p.poll() ***SyntaxError:SyntaxError('无效语法',('',1,1',.poll()')) (Pdb)
轮询,而不是在进程打开时返回None,并在完成时设置/返回返回代码,总是返回None,并且额外的输出仅在调试器中。该过程按预期启动并运行。知道我在做什么导致subprocess.poll返回“无效语法”吗?奇怪的是,由于它没有抛出异常,它只是从未更新以返回返回代码,并且任何打印p.pid、p.stdin、p.stdout的尝试都会产生相同的错误,但同样,只有在调试器中

我不确定pdb中的
SyntaxError
是关于什么的,但是:

while not p.poll():
    print 'process still running'
    sleep(10)
如果
p
returncode
为0,则将进入无限循环,这是一个很好的可能性

改用这个:

while p.poll() is None:
    print 'process still running'
    sleep(10)

我担心这可能是我拥有的库,但我刚刚在python 2.7.8 Winx64的干净安装上运行了它,它的行为是相同的。我在python 2.6/linux中到处都有这种逻辑,没有这个问题。sheesh,真不敢相信我没有想到…:)谢谢