我正在尝试使用命令行从一个简单的C#应用程序启动python脚本(我不能使用像IronPython这样的包)。它完美地工作,因为我可以看到在控制台上执行的所有打印命令。问题出现在显示matplotlib图时,没有出现但是后续行被执行...
以下是我如何从C#启动我的python脚本:
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("C:\\Users\\Alex\\Anaconda3\\python.exe C:\\Users\\Alex\\Desktop\\test.py");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
Console.ReadKey();
python脚本只是:
import sys
import matplotlib.pyplot as plt
print("OK!!")
plt.plot([1,2,3,4])
plt.show()
print("Done")
当我在命令提示符下自己启动它时,它工作正常。 有人有这个问题吗?非常感谢!
编辑:添加plt.savefig('foo.png')时,会保存图表!但我仍然希望它能够显示出来。
答案 0 :(得分:0)
以下是如何使用scriptcs
控制台中的pythonnet
执行此操作的示例:
https://github.com/pythonnet/pythonnet/issues/442
> #r "C:\Python\Anaconda3_64b\Lib\site-packages\Python.Runtime.dll";
> using Python.Runtime;
> PythonEngine.Initialize();
> dynamic mpl = Py.Import("matplotlib");
> mpl.use("TkAgg")
> dynamic plt = Py.Import("matplotlib.pyplot");
> plt.plot(new List<float> { 1, 2, 3 });
> plt.show()