在proc.stdout.read()中的n个字节或行之后停止python子进程

时间:2012-07-06 21:56:48

标签: python subprocess

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

谢谢!

1 个答案:

答案 0 :(得分: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会在head退出时收到SIGPIPE。