python - 使用进程从 C++ 程序获取数据到 Python 程序
问题描述
我正在尝试使用子进程将字符串从 C++ 程序连续发送到 Python 程序。
C++ 程序连续运行。
这是我的 C++ 程序:
#include <iostream>
#include <math.h>
#include <unistd.h>
int main(){
std::printf("This Sucks");
}
这是我的 Python 程序:
import os
import signal
from subprocess import Popen, PIPE, STDOUT
process = Popen('./Subprocess', stdin=PIPE,stdout=PIPE, universal_newlines = True, shell = True, preexec_fn = os.setsid)
while True:
output = process.stdout.readline()
if output == '' and process.poll is not None:
break
if output:
print(output)
在上面显示的表格中,Python 程序将读入并打印一次“This Sucks”。但是,如果我将 C++ 程序中的 print 语句放在一个循环中以使其重复打印,则 Python 程序会挂起并且什么也不打印。
我需要 C++ 程序中的 print 语句在 while 循环中连续运行,并且 Python 程序必须能够从 C++ 程序中读取,因为它无限期地运行并一遍又一遍地连续打印“This Sucks”。
最终目标是让 C++ 程序不断打印出传感器数据,而 Python 程序能够读取它。
我需要改变什么才能实现这一点?
解决方案
python 程序期望一次读取一行。每行都以换行符结束。
您的 C++ 程序无休止地打印相同的字符串,但没有尾随换行符。所以,对于 Python 程序来说,这看起来像是一条无止境的行,所以它只是不断地阅读,不断地阅读,直到内存不足。
\n
只需在字符串末尾添加一个换行符“ ”。
推荐阅读
- spring - 如何从属性文件中读取 SQL 查询
- python - 我定义了我的两个函数,但它没有绘制
- angularjs - 选择日期时未设置日期输入
- r - 如何创建一个堆叠条形图,其中包含两个都决定填充的因素?
- r - 使用函数更改 R 中的变量
- zsh - 使用替换重复最后一个命令的功能
- html - 为什么这个 SVG 蒙版动画在 Firefox 中断断续续,但在 Chrome 中却很流畅?
- c# - C# Linq 选择/加入自定义返回类型
- java - 解释 Java 中的 NodeJS 缓冲区 - 字节大小不匹配(NodeJS 中的加密和 Java 中的解密)
- php - Eloquent - 如果 firstOrNew 在多个条件下失败,则匹配记录中的字段