子进程32超时不起作用



我在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 ()

相关内容

  • 没有找到相关文章