从无限运行的Popen中获取部分stdout和stderr

2 投票
1 回答
1236 浏览
提问于 2025-04-15 14:50

可能重复的问题:
在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()这个函数会返回所有的内容吧?如果你在一个循环里每次读取固定大小的数据,可能会得到更好的结果。

撰写回答