从c#(.NET)调用Python函数
我有Visual Studio 2015,我的主要表单用C#编写,从那里我有不同的用Python编写的类(普通的Python而不是Iron Python)。 如何从C#代码中调用Python函数?
我知道有很多关于此的主题但是大多数都太旧了,有些解决方案太难或者涉及使用像C ++这样的中间语言。
以下是我发现有用的一些链接,但未提供我正在搜索的答案:
-
stackoverflow.com/questions/6624503/call-python-from-net
-
stackoverflow.com/questions/27075671/calling-python-from-net-via-c-bridge
有一个简单的方法还是我还需要一个解决方法? 如果我需要一个解决方法,那么最简单的是什么?
您可以通过命令行调用所有内容
System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "python whatever"; process.StartInfo = startInfo; process.Start();
或者甚至更好,只需调用Python.exe
并传递py
文件作为其参数:
System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "Python.exe"; startInfo.Arguments = "yourfile.py"; process.StartInfo = startInfo; process.Start();
建议的方法是使用IronPython 。 还有另一个答案,它涉及使用IronPython从C#访问Python代码的基础知识: 如何从C#中的Python脚本调用特定的方法?
如果IronPython不是一个选择,正如你所提到的,你可以从命令行运行该函数并根据需要传入参数,但是对于任何复杂的事情,这可能会变成意大利面。 下面是直接从命令行在模块中运行python函数的基本示例:
python -c 'import foo; print foo.hello()'
所以在C#中运行上面的代码:
System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "python.exe"; startInfo.Arguments = "-c import foo; print foo.hello()"; process.StartInfo = startInfo; process.Start();
请注意,如果您尝试返回返回值,则在这种情况下,您必须将数据打印到控制台,然后根据需要序列化C#的输出。 如果函数自己向控制台输出任何内容,这可能会有问题,除非您将其过滤掉或者有一个选项来抑制该函数的输出。