从C++;并使用其输出 我想从C++调用Python脚本,希望使用这个脚本生成的.cv文件返回到C++中。我在main中试过这个()
这将调用并执行python脚本 Python中的从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++来读取,使用
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);