我的python脚本正在将模数转换器的值输出到Raspberry Pi的控制台。为了处理这些数据,我需要将此输出发送到C ++文件的输入。我应该将我的python代码包装为C ++并将其包含在程序中,还是有更简单的方法直接传递数据?
答案 0 :(得分:2)
要传递如此少量的数据,我建议使用bash管道。这似乎是最简单的方法。
python script.py | ./cpp_prog
答案 1 :(得分:0)
我首先想到的是将您的脚本嵌入到C ++程序中。 Python本身建议使用this。这将是最干净的方法。因此,您可以控制是否以及何时从ADC获取新数据。
链接摘录:
嵌入Python的最简单形式是使用非常高级的接口。该接口旨在执行Python脚本,而无需直接与应用程序进行交互。例如,它可以用于对文件执行某些操作。
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}
应该在Py_Initialize()之前调用Py_SetProgramName()函数,以向解释器通知Python运行时库的路径。接下来,使用Py_Initialize()初始化Python解释器,然后执行打印日期和时间的硬编码Python脚本。之后,Py_Finalize()调用将关闭解释器,然后结束程序。在实际程序中,您可能希望从其他来源(可能是文本编辑器例程,文件或数据库)获取Python脚本。使用PyRun_SimpleFile()函数可以更好地从文件中获取Python代码,从而避免了分配内存空间和加载文件内容的麻烦。
等等,依此类推。这将指导您。希望你的项目好=)
答案 2 :(得分:0)
如果您的意思是在运行时,则最简单的方法可能是通过std::system
调用
来自https://en.cppreference.com/w/cpp/utility/program/system:
#include <cstdlib>
#include <fstream>
#include <iostream>
int main()
{
std::system("ls -l >test.txt"); // execute the UNIX command "ls -l >test.txt"
std::cout << std::ifstream("test.txt").rdbuf();
}
可能的输出:
total 16
-rwxr-xr-x 1 2001 2000 8859 Sep 30 20:52 a.out
-rw-rw-rw- 1 2001 2000 161 Sep 30 20:52 main.cpp
-rw-r--r-- 1 2001 2000 0 Sep 30 20:52 test.txt
只需运行python即可。