我在RHEL 6.5上使用Python 2.6.6的子进程32 3.2.6。类似的序列
command = "sleep 20"
proc = subprocess.Popen(command, shell=True, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = proc.communicate(None, timeout=1)
按预期工作。但是,如果
command = "sleep 20; echo Hello World"
子流程似乎运行了整整20秒。我可以解决这个问题,但如果能理解我做错了什么,或者为什么会这样,那就太好了。顺便说一句,这是在一个非常可控、值得信赖的环境中,所以"shell=True"没有风险。
我尝试了所有的东西,只使用这个:
def reader(f,buffer):
while True:
line=f.readline()
if line:
buffer.append(line)
else:
break
command = subprocess.Popen (cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
command.stdin.write (bytearray(testin, 'utf8'))
command.stdin.close ()
print ('Writing i/p')
linebuffer = []
t = Thread (target=reader, args=(command.stdout, linebuffer))
t.daemon = True
t.start ()
start = time.time ()
while start + timeout > time.time ():
if linebuffer:
ans += linebuffer.pop ()