Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++;并使用其输出 我想从C++调用Python脚本,希望使用这个脚本生成的.cv文件返回到C++中。我在main中试过这个()_Python_C++_Python 3.x_Python 2.7 - Fatal编程技术网

从C++;并使用其输出 我想从C++调用Python脚本,希望使用这个脚本生成的.cv文件返回到C++中。我在main中试过这个()

从C++;并使用其输出 我想从C++调用Python脚本,希望使用这个脚本生成的.cv文件返回到C++中。我在main中试过这个(),python,c++,python-3.x,python-2.7,Python,C++,Python 3.x,Python 2.7,这将调用并执行python脚本 Python中的print命令正在执行。调用脚本时,屏幕上正在打印内容。到现在为止,一直都还不错。但是,它没有创建.csv文件(同一脚本的一部分) 示例:我有一个training.csv文件,其中包含100个条目。我调用了Python脚本,对脚本做了一些修改,因此training.csv文件现在应该只包含50个条目,而不是100个条目。它被覆盖。但是,没有发生这种情况。脚本中的其余命令(print等)工作正常 < >代码>训练.CSV 文件通常用C++来读取,使用

这将调用并执行python脚本

Python中的
print
命令正在执行。调用脚本时,屏幕上正在打印内容。到现在为止,一直都还不错。但是,它没有创建.csv文件(同一脚本的一部分)

示例:我有一个
training.csv
文件,其中包含100个条目。我调用了Python脚本,对脚本做了一些修改,因此
training.csv
文件现在应该只包含50个条目,而不是100个条目。它被覆盖。但是,没有发生这种情况。脚本中的其余命令(
print
等)工作正常

< >代码>训练.CSV 文件通常用C++来读取,使用<代码> fSturth<代码> > <代码> GETLION<代码> >


如何使用Linux(

< p>),这里有一个解决方案,可以从C++应用程序中嵌入Python模块的执行。这并不比通过系统调用分叉/执行python脚本更好,也不比通过系统调用分叉/执行python脚本更糟糕,这只是一种不同的方法。它是否最好取决于您的上下文和用法

前一段时间,我已经编写了一个方法,将Python模块加载为C++应用程序,这里是./P> 基本上,您需要

#包括
,然后
Py\u Initialize()
启动python解释器

然后使用:
PyRun\u SimpleString(“导入系统”),您可以通过执行
PyRun\u SimpleString('sys.path.append(“path/to/my/module/”))
加载插件

<> >在C++和Python之间交换值,事情变得更困难,你必须把所有C++对象转换成Python对象(脚本中的起始行69)。 然后您可以使用
PyObject\u call\u Object(…)
调用您的函数,使用您创建的所有python对象作为参数

获取返回值,并转换C++对象中的所有值。不要忘记所有这些中的内存管理

要结束python解释器,只需调用
Py\u Finalize()


它看起来确实比实际情况更难,但您必须非常小心,因为它可能会导致泄漏、安全问题等。

尝试使用POSIX的
popen()
而不是
system()
。它将子进程的stdin/stdout传递到返回的文件句柄

FILE* in = popen(command.c_str(), "r");

fscanf(in, ... // or some other method of reading

pclose(in);

您可能希望了解嵌入(和扩展)python的方法,而不是通过shell处理python解释器的调用。具体取决于平台。Windows和Unix有不同的方法。你在哪一台?关于这一点,Python没有什么特别的。这应该让您开始:另外,如果Python脚本创建了csv文件,那么对于较短的示例。这样就不需要重定向脚本输出。只需运行它,并打开它使用标准的C++ API创建的文件。@ VoVIIAN没有帮助:(请你展示一个样本…谢谢!)
FILE* in = popen(command.c_str(), "r");

fscanf(in, ... // or some other method of reading

pclose(in);