好的,我试图从python脚本运行一个C程序.目前我正在使用测试C程序:
#include <stdio.h>
int main() {
while (1) {
printf("2000\n");
sleep(1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
模拟我将要使用的程序,它不断地从传感器获取读数.然后我试图"2000"从C程序读取输出(在这种情况下)与python中的子进程:
#!usr/bin/python
import subprocess
process = subprocess.Popen("./main", stdout=subprocess.PIPE)
while True:
for line in iter(process.stdout.readline, ''):
print line,
Run Code Online (Sandbox Code Playgroud)
但这不起作用.从使用print语句开始运行该.Popen行然后等待for line in iter(process.stdout.readline, ''):,直到我按下Ctrl-C.
为什么是这样?这正是我见过的大多数示例都是他们的代码,但它没有读取文件.
编辑:
有没有办法让它只在有东西被阅读时才能运行?
因此,已经有一个Python程序设置在我必须构建的控制台上运行.我将使用Javascript为应用程序构建Web GUI界面.我怎么会:
一个.在不触及原始代码的情况下,处理这个Python程序的输入/输出.
湾 通过Javascript调用将控制台行输入发送到Python程序.我已经查看了原始HTTP请求/ AJAX,但我不确定我将如何将其作为输入发送到Python程序.
我想知道是否有任何方法可以处理非阻塞的情况以及从 python 子进程流式传输stdout和stderr的情况。我已经通过这个网站浏览了几篇文章,但没有一篇文章能回答这种情况。它要么通过在另一个线程中运行读取来显示,以便主线程不受影响(或)只是如何从进程中流式传输数据。我的问题是两者的结合。我想问题出在read()或readline()因为它们在输出流期间以一种或另一种方式阻塞。
我想要一个可流式传输的对象,这是我的主要关注点。我附上我已经通过的参考资料以供进一步参考。
script_process = subprocess.Popen(command_sequence[i],preexec_fn=os.setsid, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while script_process.poll() is None:
for output in iter(lambda: script_process.stdout.readline(), b''):
sys.stdout.writelines(output)
Run Code Online (Sandbox Code Playgroud)