python从shell命令输出中读取

时间:2013-12-05 07:03:28

标签: python shell subprocess

我知道你可能认为这是一个重复的问题,但到目前为止我没有找到解决我自己问题的方法。

目前,我有一个C程序不断产生数据流。我希望有一种方法可以让我的python程序读取这些数据,所以我不必用C语言完成所有内容。

C程序主要是这样的:

int i = 0;
while(1){
    printf("%d %d\n", i, i+1);
    i++;
}

我在Python中阅读并尝试了子进程,似乎他们都需要等待命令完成。(例如:Constantly print Subprocess output while process is running)我希望有一些缓冲机制,所以我可以记录这个比特流并处理它逐行。感谢。

几个假设:

1)处理线可以丢弃

2)缓冲区/队列大小可以没问题,因为我可以控制源的速率以匹配python程序的处理速度。

更多背景: C程序基本上驱动摄像机输入(这就是它用C编写的原因),做一些OpenCV并输出一个对象位置(x,y)int值。 python程序需要进行进一步处理的位置。

感谢。

1 个答案:

答案 0 :(得分:1)

这是一种逐行处理c(或shell)程序与子进程模块的输出的方法:

from subprocess import Popen, PIPE
# Set up the process
p = Popen("yourprogram", stdout=PIPE, close_fds=True)
count = 0
while True:
    count += 1
    print '%s: %s' % (count, p.stdout.readline().strip())

出于演示目的,yourprogram可以是一个简单的shell脚本(设置可执行位):

#!/bin/sh
while sleep 1s
do
    date
done

运行python程序会产生:

$ python test.py
1: Thu Dec  5 23:31:45 PST 2013
2: Thu Dec  5 23:31:46 PST 2013
3: Thu Dec  5 23:31:47 PST 2013
4: Thu Dec  5 23:31:48 PST 2013
5: Thu Dec  5 23:31:49 PST 2013
6: Thu Dec  5 23:31:50 PST 2013
7: Thu Dec  5 23:31:51 PST 2013

一直持续到你终止它为止。