在 C# 中由命令行启动时不显示 Python Plot
Posted
技术标签:
【中文标题】在 C# 中由命令行启动时不显示 Python Plot【英文标题】:Python Plot doesn't appear when launched by Command Line in C# 【发布时间】:2018-05-16 23:52:45 【问题描述】:我正在尝试使用命令行从简单的 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】:以下是如何在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()
【讨论】:
最终目标是将其嵌入到WPF应用程序中,这样可以吗? 这取决于您的 WPF 应用程序的复杂性,但这里有一个小演示:github.com/pythonnet/pythonnet/blob/master/demo/DynamicGrid.py以上是关于在 C# 中由命令行启动时不显示 Python Plot的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu 16.04在启动和关机时不显示启动和关机画面且显示详细的命令信息,没有进度条和Logo,或者只有紫色界面,或者没有开机画面等问题解决
如何创建一个 C# 应用程序来决定自己是显示为控制台还是窗口应用程序?