我有一个python代码。我需要从我的c#程序中执行python脚本。在对此进行了一些搜索后,我发现主要有两种方法从c#执行python脚本。
使用'Process'命令和
另一个使用Iron Python。
我的问题可能看起来很愚蠢,有没有其他方法可以执行python脚本?更具体一点,我可以创建一个类,让我们说c#中的'Python'和一个成员函数'execute_script',它不使用像铁python这样的任何api,或者不创建执行脚本的过程,所以如果调用'execute_scipt(mypythonprogram.py)',我的脚本被执行。对不起,如果这看起来很蠢。如果可以的话,请帮帮我。提前谢谢。
答案 0 :(得分:0)
您可以将python嵌入到您的应用程序中。查看python文档部分扩展和嵌入> Embedding Python in Another Application
编辑:这需要C ++,但是构建一个可以从C#中使用的C ++包装器应该不会太难(参见this MSDN article)。
答案 1 :(得分:0)
您是否可以创建一个C#类,在不使用Iron Python且不使用任何外部API的情况下调用Python脚本?不,那是不可能的。您还有其他一些选择:
Smead已经描述了一种方法。它可以工作,并且确实避免了创建另一个进程,但是要使它运行将会有很多工作,并且它仍然在技术上使用API。我不建议将此文件用于不需要来回传递数据的单个Python脚本,但如果您的其他选项没有成功,那么很高兴知道该选项存在。
这可能就是我要做的。当恶意用户可能导致您执行伪shell命令,或者恶意用户可以替换Python脚本的内容时,进程存在安全问题。当你能锁定这两件事时,这是非常安全的。
速度不太可能成为一个问题。使用进程调用只需几分钟就可以设置一个C#程序,所以如果你的导师关注速度,只需编写并测量速度,看看它是否真的有问题。
C#是一种非常富有表现力的语言,具有非常强大的标准库,因此假设您的脚本不是数千行,并且不使用任何模糊的Python库,这实际上可能没什么用处。如果你真的不能使用Process,这将是我考虑的下一个解决方案。