从c++调用Python脚本并使用其输出
Calling Python script from C++ and using its output
我想从c++调用一个python脚本,并希望使用该脚本生成的输出。csv文件返回到c++。我在main():
中尝试了这个std::string filename = "/home/abc/xyz/script.py";
std::string command = "python ";
command += filename;
system(command.c_str());
调用并执行python脚本。
Python中print
命令正在执行。当脚本被调用时,内容被打印到屏幕上。到目前为止一切顺利。但是,它没有创建.csv文件(同一脚本的一部分)。
training.csv
文件,其中有100个条目。我调用了Python脚本,对脚本做了一些修改,这样training.csv
文件现在应该只包含50个条目,而不是100个。它是覆盖。然而,没有这样的事情发生。脚本中的其余命令(print
等)运行正常。
training.csv
文件是用c++读的,通常使用fstream
和getline
。
你知道怎么做吗(用Linux)?
这是一个从c++应用程序中嵌入python模块执行的解决方案。它并不比通过系统调用分叉/执行python脚本更好或更坏,它只是一种不同的方式来完成它。是否最好取决于你的上下文和用法。
前段时间,我编写了一种方法,将python模块作为插件加载到c++应用程序中,这是有趣的部分。
基本上,您需要#include <Python.h>
,然后Py_Initialize()
来启动您的python解释器。
然后执行import sys
,使用:PyRun_SimpleString("import sys");
,然后执行PyRun_SimpleString('sys.path.append("path/to/my/module/")')
加载插件。
要在c++和Python之间交换值,事情变得更加困难,您必须将所有c++对象转换为Python对象(在我的脚本中从第69行开始)。
然后你可以使用PyObject_Call_Object(...)
调用你的函数,使用你创建的所有python对象作为参数。
你得到返回值,并在c++对象中转换所有这些值。不要忘记所有这些中的内存管理!
要结束python解释器,只需调用Py_Finalize()
。
这看起来比实际上要难,但你必须非常小心,因为它可能导致泄漏,安全问题等。
尝试使用POSIX的popen()
代替system()
。它将子进程的stdin/stdout管道到返回的文件句柄。
FILE* in = popen(command.c_str(), "r");
fscanf(in, ... // or some other method of reading
pclose(in);
- 从C++应用获取PowerShell脚本输出
- 将.init_array部分包含在链接器脚本中会产生不可用的输出
- 如何从 bash 脚本捕获终端输出并将其显示在我的 Qt UI 中?
- 将Python脚本的输出链接到C 程序的输入
- 从c++程序运行shell脚本会自动将shell脚本的输出显示到控制台吗
- 在Qt应用程序中读取python脚本C++输出
- Shell脚本终止程序,但导致无法写入输出文件
- 如何将C++程序的输出用作 Bash 脚本中的变量
- 将C++程序输出与 Python 脚本链接
- CGI 渲染到屏幕外壳脚本输出
- 从C++执行 bash 脚本并读取其输出 ubuntu sdk
- 关闭标准输出和脚本
- 如何通过脚本将输出写入C++中的文本文件
- 将外部进程的输出管道传输到正在运行的脚本C++
- 使用C++或Bash/Shell脚本评估后台linux命令的输出
- 解释R脚本的valgrind输出
- 在QT中获取Python脚本的输出
- 从c++调用Python脚本并使用其输出
- 如何在c++中重定向读取bash脚本的输出
- 从bash脚本返回输出到调用c++函数