在Python中,我可以生成一个子对象并获取其输出的文件描述符,如下所示:
pid, out = pty.fork()
if pid:
现在我想从子输出读取行,直到它结束(我可以用非阻塞的waitpid(pid)
检查)。你知道吗
我想这样做:
f = os.fdopen(out)
现在呢
for line in f:
或者
while True:
f.readline()
但这里至少有两个问题:
1假设孩子在发出最后一行时死了。现在for
和readline
将抛出一个异常,如何从异常处理程序内部读取不完整的行?你知道吗
for
和readline
将立即抛出异常。我想等一下孙子的输出。你知道吗另一种选择是
while True:
(rSet, _, _) = select.select([out], [], [], <some seconds>)
if rSet:
buf = os.read(out, <some length>)
if buf:
#process it, assembling lines
else:
#check if child dead, if so, bail out
但这相当麻烦,需要我自己费力地组装生产线。你知道吗
这是最好的办法,还是有更好的办法?你知道吗
从python doc:
我相信来自子进程的管道将被关闭,并且在尝试从中读取时将出现IOError。你知道吗
编辑(在编辑之后):操作系统在管道中缓冲输出,因此您应该得到它写入的所有内容(当然,直到它溢出为止)
相关问题 更多 >
编程相关推荐