在 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# 应用程序来决定自己是显示为控制台还是窗口应用程序?

脚本学习一(echoecho off@start)

如何使 Python PyQT 程序无法在 Windows 中打开命令行

C# 调用 python3

做自动化测试时,用命令行打开浏览器,时不时会弹出是不是进入安全模式的弹框,如何关闭安全模式功能