C#中的命令行启动时不会出现Python Plot

时间:2017-12-03 11:06:19

标签: c# python matplotlib command

我正在尝试使用命令行从一个简单的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')时,会保存图表!但我仍然希望它能够显示出来。

1 个答案:

答案 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()

enter image description here