C 和 Python 程序之间的管道
Pipe between a C and a Python program
我目前正在尝试编写一个与硬件交互的 C 程序,我选择这样做是因为硬件制造商为此硬件提供了 C SDK。但是,我希望这个 C 程序将从硬件(例如传感器)接收的数据输出到管道,这样我就可以编写一个 Python 程序来获取数据并解析它并进行一些分析用它。我是运行上的程序Raspberry Pi(Linux)。如何在这两个不同的程序(Python 和 C)之间创建管道?我可以通过管道位置来做到这一点吗?
由于您只想在一个方向上传输数据,因此无需在代码中创建管道。
最简单的方法是让 OS 通过将数据写入 C 程序中的 stdout
并从 Python 中的 stdin
读取数据来为您传输数据.
你会运行这样的程序:
mycprog | python myscript.py
在 C 代码中,您可以使用如下内容:
#include <stdio.h>
unsigned char buffer[BUFFER_SIZE];
/* read from sensor to buffer */
fwrite(sensor_buffer, sizeof(usigned char), BUFFER_SIZE, stdout);
在 Python 端,代码看起来像这样:
import sys
sensor_bytes = sys.stdin.read(BUFFER_SIZE)
您也可以使用 popen
直接从 C 代码启动 Python 脚本,但这会使您的解决方案不够灵活,如果您想将数据发送到另一个脚本或程序您将不得不更改 C 代码。
最后,如果你不想依赖 shell,或者你想 运行 你的两个程序在不同的 shell 中,你可以创建一个命名管道使用mkfifo
.
我目前正在尝试编写一个与硬件交互的 C 程序,我选择这样做是因为硬件制造商为此硬件提供了 C SDK。但是,我希望这个 C 程序将从硬件(例如传感器)接收的数据输出到管道,这样我就可以编写一个 Python 程序来获取数据并解析它并进行一些分析用它。我是运行上的程序Raspberry Pi(Linux)。如何在这两个不同的程序(Python 和 C)之间创建管道?我可以通过管道位置来做到这一点吗?
由于您只想在一个方向上传输数据,因此无需在代码中创建管道。
最简单的方法是让 OS 通过将数据写入 C 程序中的 stdout
并从 Python 中的 stdin
读取数据来为您传输数据.
你会运行这样的程序:
mycprog | python myscript.py
在 C 代码中,您可以使用如下内容:
#include <stdio.h>
unsigned char buffer[BUFFER_SIZE];
/* read from sensor to buffer */
fwrite(sensor_buffer, sizeof(usigned char), BUFFER_SIZE, stdout);
在 Python 端,代码看起来像这样:
import sys
sensor_bytes = sys.stdin.read(BUFFER_SIZE)
您也可以使用 popen
直接从 C 代码启动 Python 脚本,但这会使您的解决方案不够灵活,如果您想将数据发送到另一个脚本或程序您将不得不更改 C 代码。
最后,如果你不想依赖 shell,或者你想 运行 你的两个程序在不同的 shell 中,你可以创建一个命名管道使用mkfifo
.