1

我想在 python 中运行一个子进程,直到子进程输出了一定数量的字节或行。在此之后,我想终止它。这可能与子流程有关吗?

这是我到目前为止所拥有的:

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#kill after reaching n bytes of output, proc.terminate()
out, errors = proc.communicate()

谢谢!

4

1 回答 1

0

一种相当直接的方法是将输出重定向到将为您进行字节/行计数的程序,例如:

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
head = subprocess.Popen(['head', '-n', '20'], stdin=proc.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.stdout.close()
out, errors = head.communicate()

我不确定这种方法的可移植性如何,我只能在 Linux 上进行测试,但是在 Windows 上你应该能够使用该more命令来实现类似的行为。

关闭proc.stdout是必要的,以便在退出proc时接收 SIGPIPE 。head

于 2012-07-06T22:11:14.527 回答