subprocess.poll的Python语法错误
我今天遇到了这个问题,并设法用这个小脚本存根重复了这个问题,在win7x64机器上运行Python2.7.6,但是在各种windows平台上使用更大的脚本中的可移植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
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,真不敢相信我没有想到…:)谢谢