我理解您可能认为这是一个重复的问题,但到目前为止我还没有找到解决我自己问题的方法。
目前,我有一个 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程序需要这个位置来进行一些进一步的处理。
谢谢。
最佳答案
下面是使用 subprocess 模块逐行处理 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
它会一直持续到您终止为止。
关于python从shell命令输出中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393534/