c#运行python程序

c#运行python程序

更多文章欢迎访问个人博客 www.herobin.top

最近做实验室的水体项目,需要在c#中运行python程序。

开始百度到可以通过IronPython直接在c#中调用py文件,在试了一个简单的helloworld确实可以之后就以为搞定搁置了一段时间,在python程序写好后运行发现了问题,IronPython中并不能导入python的第三方模块如numpy。在google之后发现,IronPython是基于.Net平台的,只能加载CLR Assembly,除了标准库,不能加载一般的C Extension。而numpy这种恰好是编译过的,根本不可能在IronPython上正常使用,至此,IronPython方式作废。

想到的第二种方式是将Python文件打包为exe文件,再在c#中调用exe,这里是在python文件中写好main方法的,这样调用exe就可以直接执行,只要传入参数就好了。

if __name__ == '__main__':
    render(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4])

这里面传入的四个参数是水体渲染需要的四个参数,第一个是文件路径,第二个是左上右下坐标,第三个是样本点坐标,第四个是样本点对应的值。这里本来后三个是数组格式的,但是在c#中传入double类型的二维数组之后出错,估计是因为python中没有指定数据类型的概念导致,所以将c#中的数组转化为拼接的字符串传了进来,在python程序中再将字符串按照对应的参数转化为数组。至此搞定了。

将python程序打包成exe是通过pyinstaller

通过pip安装pyinstaller

pip install pyinstaller

生成exe

pyinstaller yourprogram.py

这样生成的是一个文件夹,生成单一可直接执行的最好用 -F的 方式

pyinstaller -F yourprogram.py
C#中调用Python程序可以通过以下步骤实现: 1. 首先,将Python程序转换为动态链接库(dll)。这可以通过使用Cython或者使用Python的ctypes库来实现。在转换为dll之前,确保已经安装了Python运行环境,并且安装了所需的第三方库(如numpy)\[1\]。 2. 在C#中,使用DllImport特性来导入Python的dll文件。这样可以在C#中调用Python的函数。确保在C#项目中引用了Python的dll文件。 3. 在C#中调用Python函数时,需要传递参数并接收返回值。可以使用C#的InteropServices命名空间中的Marshal类来处理参数和返回值的转换。 下面是一个示例代码,演示了如何在C#中调用Python程序: ```csharp using System; using System.Runtime.InteropServices; public class Program { \[DllImport("python_dll_path", CallingConvention = CallingConvention.Cdecl)\] public static extern double func(string a, string b); public static void Main(string\[\] args) { string a = "2"; string b = "3"; double result = func(a, b); Console.WriteLine(result); } } ``` 在上面的代码中,`python_dll_path`是Python程序转换为的dll文件的路径。`func`是Python程序中的函数名,通过DllImport特性导入。 请注意,这只是一个简单的示例,实际情况可能会更复杂。在实际使用中,还需要处理异常、错误检查等情况。 希望这个回答对您有帮助!\[1\] #### 引用[.reference_title] - *1* [c#调用python的四种方法(尝试了四种,只详细讲解本人成功的后两种,其余方法只列出,详细用法请自行谷歌...](https://blog.csdn.net/qq_42063091/article/details/82418630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [c#调用python的三种方法](https://blog.csdn.net/qq_36744449/article/details/116134794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值