我正在使用python来绘制在C ++代码中生成的数据。在我的C ++代码中,我使用数组生成和存储数据,并将数据输出到控制台。
因此编译c ++代码的输出是:
0 1.38889 1.38889 1.38889 1.38889 100
0 2.08333 2.77778 2.77778 52.0833 100
......大约20次迭代
现在,在Python方面,我可以使用我的函数并将数据输出到控制台,但我实际上无法将数据存储在列表或其他内容
以下是我的python代码:
import heat
heat.heat()
print heat.heat()
type(heat.heat())
输出:
0 1.38889 1.38889 1.38889 1.38889 100
0 2.08333 2.77778 2.77778 52.0833 100
...
0 24.7484 46.755 67.0274 84.5801 100
0 24.7664 47.2768 67.0564 84.9026 100
48
输入'int'
我是swig的新手,所以我的命名惯例很糟糕,但在我的C ++代码中,我只需要导入一个函数,所以就是这样的原因。我的heat.heat()
函数正在使用Jacobi迭代来解决热传导问题,其中值现在已在C ++文件中进行了硬编码。基本上我只想绘制数据图,但我的heat.heat()
函数只输出到屏幕。
答案 0 :(得分:0)
我建议使用subprocess.check_output() function。此函数允许您执行任意命令/程序并在Python中将其输出捕获为字符串。例如:
import subprocess
output = subprocess.check_output("command to execute", shell=True)
变量"输出"现在包含命令的输出,您可以使用任何常用的string methods进行解析。根据您的使用情况,您可能需要也可能不需要shell=True
参数。主要区别在于命令是在默认shell环境中执行还是仅作为子进程执行。文档有更多细节和一些警告你应该阅读。 (如果"执行"命令可能来自不受信任的来源,请不要将其设置为true。)
您无法使用此功能捕获本机python函数的输出,因此您有两个选择:
由于您尝试从已编译的C ++可执行文件中捕获输出,因此您可以将其作为执行"执行的命令执行。
如果您的heat()
函数不仅仅是调用可执行文件,那么您可以在启动现有脚本的包装脚本中使用subprocess.check_output()
,并将所有输出处理移动到那个脚本。