我在RHEL 6.5上使用subprocess32 3.2.6和Python 2.6.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"没有风险。
答案 0 :(得分:0)
我尝试了所有的东西,只需使用它:
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 ()