博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#调用Python代码
阅读量:6543 次
发布时间:2019-06-24

本文共 2747 字,大约阅读时间需要 9 分钟。

C#中,如果碰到需要调用Python代码时,一种方法是使用IronPython,不过这种方法太繁琐太累,特别是碰到Python代码中带有大量的第三方包,就会一直报错,提示缺少相应模块,这种方法太low,只支持Python2代码,果断摒弃。推荐另一种方法是用pyinstaller打包Python程序,会自动将程序中引用的第三方包也打包进去,Python3.X随便用,很方便。pyinstaller怎么安装就不用说了,下面介绍下pyinstaller打包的过程和c#调用的过程。

1、现在,在你的电脑桌面有一个Python文件(名字为secondcompare.py)需要打包,里面的代码如下:

import difflibimport pandas as pdimport sysdef compare(fundname, securityname):    ratio = difflib.SequenceMatcher(None, fundname, securityname).ratio()    return ratiodef second(fundname,securityname_string):    securityname_list = []    if '\n' in securityname_string:        fund = securityname_string.split('\n')        for line in fund:            if len(line) > 0:                line = line.strip()                line = line.rstrip('\r')                securityname_list.append(line)    else:        securityname_list.append(securityname_string)    ratio_list = [(fundname, securityname, compare(fundname, securityname)) for securityname in securityname_list]    pd_result = pd.DataFrame(ratio_list, columns=['FundName', 'SecurityName', 'Ratio']).sort_values(by='Ratio', ascending=False)    return pd_result.head(1).values.tolist()[0][1]    if __name__=='__main__':    # fundname="Ivy VIP High Income II"    # securityname_string='''Janus Henderson VIT Overseas Portfolio: Service Shares\n    # Janus Henderson VIT Forty Portfolio: Service Shares\n    # Fidelity Variable Insurance Products Fund - VIP High Income Portfolio: Service Class    # '''    fundname=sys.argv[1]    securityname_string=sys.argv[2]    a=second(fundname,securityname_string)    print(a)
View Code

2、打开cmd命令窗口,先执行cd C:\Users\jlin10\Desktop进入到桌面路径(用户名自己改),然后执行pyinstaller -F -i icon.ico secondcompare.py,pyinstaller的各个参数设置可以参考。然后cmd就开始跑,到最后提示打包成功,结果在桌面生成了一个与Python文件同名的spec文件和三个文件夹__pycache__、build、dist,打包好的exe程序就放在dist文件夹里。

 

 

 

 

 

 

3、接下来在C#中调用这个secondcompare.exe,把第2步生成的四个东西剪切到C#的debug文件夹里,引用using System.Diagnostics;,输入以下代码:

string temppath = System.AppDomain.CurrentDomain.BaseDirectory.ToString();Process p = new Process();p.StartInfo.FileName = temppath + "\\dist\\secondcompare.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.CreateNoWindow = true;string arg1="Ivy VIP High Income II";string arg2="Janus Henderson VIT Overseas Portfolio: Service Shares\nJanus Henderson VIT Forty Portfolio: Service Shares\nFidelity Variable Insurance Products Fund - VIP High Income Portfolio: Service Class";p.StartInfo.Arguments ="\"" + arg1 + "\"" + " " + "\"" + arg2+ "\"";p.Start();string output = p.StandardOutput.ReadToEnd();p.WaitForExit();p.Close();MessageBox.Show(output);

其中,参数间是用空格分隔的,这里两个参数都带有空格,不能直接相连,要先用"\""括起来,中间再用空格相连。

最后,附上。

 

转载于:https://www.cnblogs.com/JTCLASSROOM/p/10951084.html

你可能感兴趣的文章
数据库迁移工具
查看>>
【喜报】HCIE--PASS !最可怕的敌人,就是没有坚强的信念!
查看>>
2019年人工智能行业又进入冬天了吗?
查看>>
想学前端,为什么不看这些书呢?
查看>>
记一次mapreduce读取不到输入文件的问题
查看>>
我的友情链接
查看>>
MariaDB集群Galera Cluster的研究与测试
查看>>
SONY控制键盘JX-11,EVI-D70P控制方案
查看>>
项目经理必备 - 项目绩效测量工具EVM详解(上)
查看>>
Spring AOP 之二:Pointcut注解表达式
查看>>
在普通台式机上搭建服务器虚拟化架构Esxi平台
查看>>
电话线路 30B+D 名词解释
查看>>
python字典嵌套字典实例
查看>>
吉炬消费系统软件输入密码后无法打开软件界面故障处理
查看>>
Hibernate学习系列————注解一对多双向实例
查看>>
Cannot load from mysql.proc
查看>>
网络运维之 EX4200消除var分区使用过高的告警
查看>>
【最好的流程是没有流程】
查看>>
Apache Thrift 教程
查看>>
Python Epoll
查看>>