我知道你可能认为这是一个重复的问题,但到目前为止我没有找到解决我自己问题的方法。
目前,我有一个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程序需要进行进一步处理的位置。
感谢。
答案 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
一直持续到你终止它为止。