代码如下
Py_SetPythonHome(L"D:\\ProgramData\\Miniconda3_32");
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
PyRun_SimpleString("import matplotlib.pyplot as plt"); /*调用python文件*/
PyRun_SimpleString("plt.plot([1,2,3,4], [12,3,23,231])"); /*调用python文件*/
PyRun_SimpleString("plt.show()"); /*调用python文件*/
Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
报错信息:
File "<string>", line 1, in <module>
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\pyplot.py", li
ne 3019, in plot
return gca().plot(
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\pyplot.py", li
ne 2532, in gca
return gcf().gca(**kwargs)
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\pyplot.py", li
ne 854, in gcf
return figure()
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\pyplot.py", li
ne 800, in figure
FigureClass=FigureClass, **kwargs)
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\pyplot.py", li
ne 316, in new_figure_manager
return _backend_mod.new_figure_manager(*args, **kwargs)
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\backend_bases.
py", line 3545, in new_figure_manager
return cls.new_figure_manager_given_figure(num, fig)
File "D:\ProgramData\Miniconda3_32\lib\site-packages\matplotlib\backends\_back
end_tk.py", line 883, in new_figure_manager_given_figure
window = tk.Tk(className="matplotlib")
File "D:\ProgramData\Miniconda3_32\lib\tkinter\__init__.py", line 2018, in __i
nit__
baseName = os.path.basename(sys.argv[0])
IndexError: list index out of range
请按任意键继续. . .
这个sys.argv[0] 代表当前python文件,由于是c++直接调用,这个sys.argv[]为空。
于是我在一个python脚本中将这个值打印出来:是一个如如'D:/code/chezhe/chezhe.py'文件名称
于是我尝试在c++文件中手动将sys.argv添加一个文件(随便写一个文件路径)。
PyRun_SimpleString("import os"); /*调用python文件*/
PyRun_SimpleString("sys.argv.append('D:/code/chezhe/chezhe.py')"); /*调用python文件*/
之后运行:成功!