从无限运行的Popen中获取部分stdout和stderr
可能重复的问题:
在C或Python中使用popen绕过子进程输出的缓冲
我正在为一个服务器的命令行脚本做一个包装,这个脚本应该一直运行下去。
我需要做的是在不等子进程完成的情况下,获取当前的标准输出。
我的意思是,如果我运行下面的代码,一切都能正常工作:
ls = Popen(["ls"], stdout=PIPE)
output = ls.stdout.read()
但是如果我用一个无限运行的程序做同样的事情:
server = Popen(["python","-m","SimpleHTTPServer"], stdout=PIPE)
output = server.stdout.read()
它就不会返回了……
更新:甚至
output = server.stdout.read(1)
也会卡住……
你知道有没有办法以一种与操作系统无关的方式,从Popen(或类似的线程实现)捕获部分输出吗?
1 个回答
-1
我猜测read()这个函数会返回所有的内容吧?如果你在一个循环里每次读取固定大小的数据,可能会得到更好的结果。