Xeu*_*eun 10 c# python ironpython python.net
我有以下问题:我有一个用python编写的旧应用程序.这个应用程序允许用户指定将执行的小python步骤,python步骤基本上是小python脚本,我称之为步骤,因为此应用程序的执行涉及其他步骤,如从命令行执行某些操作.这些python步骤作为python代码存储在xml文件中.
现在我想用C#.NET重写应用程序.做这样的事情是否有最佳实践解决方案?
我不想将python作为外部程序调用并将实际的python步骤(脚本)传递给python解释器 - 我想要内置的东西.我只是遇到了IronPython和.NET python,但我不太确定使用哪一个.我想为小脚本实现某种调试,这就是为什么调用解释器解决方案是不可接受的.
更重要的是,许多脚本已经存在.因此,我必须使用python的C#实现,它具有与python相同的语法以及与python的libs相同的内置.这甚至可能吗?
谢谢和问候Xeun
cdj*_*djc 10
IronPython就是你想要的.它编译为.NET字节码.您可以合理地轻松地从另一种.NET语言调用python代码(反之亦然).我认为,Visual Studio也支持IronPython.
Python 脚本可以使用 IronPython 从 C# 执行。
var ipy = Python.CreateRuntime();
dynamic test = ipy.UseFile("Test.py");
test.Simple();
Run Code Online (Sandbox Code Playgroud)
也可以看看:
http://putridparrot.com/blog/hosting-ironpython-in-ac-application/
和
https://blogs.msdn.microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-ac-4-0-program/
您可以使用 IronPython 的 ScriptScope.GetVariable 来获取实际的函数,然后您可以像 C# 函数一样调用它。像这样使用它:
C#代码:
var var1, var2 = ...
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"C:\test.py", scope);
dynamic testFunction = scope.GetVariable("test_func");
var result = testFunction(var1,var2);
Run Code Online (Sandbox Code Playgroud)
Python代码:
def test_func(var1,var2):
...do something...
Run Code Online (Sandbox Code Playgroud)
我花了一段时间才终于弄清楚,而且非常简单。而且 IronPython 是免费的并且非常易于使用。希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
29540 次 |
| 最近记录: |