将Python脚本的输出链接到C ++程序的输入

时间:2019-03-01 12:31:46

标签: python c++ raspberry-pi

我的python脚本正在将模数转换器的值输出到Raspberry Pi的控制台。为了处理这些数据,我需要将此输出发送到C ++文件的输入。我应该将我的python代码包装为C ++并将其包含在程序中,还是有更简单的方法直接传递数据?

3 个答案:

答案 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即可。