您的位置:首页 > 编程语言 > Python开发

C#如何调用Python执行脚本,并将执行结果显示值显示至C#界面

2017-06-21 08:01 639 查看
在网上查找了很多资料,试了很多C#调用Python执行脚本的代码,但大都是执行出错的。花了很多时间最终找了C#能正确调用Python脚本的方法且将结果显示,而且此方法已编译运行成功,下面我举个例子介绍下C#如何调用Python执行脚本,并将执行结果显示值显示至C#界面。

第一步:首先的安装IronPython2.7,这个网上有很多可以直接下载,默认安装路径就行(C:\Program Files (x86)\IronPython 2.7),其次将IronPython2.7路径添加到系统变量路径,这样便于在windows下cmd执行Python的.py脚本文件,在哪添加如下图所示:



操作:右击 我的电脑->属性->高级系统设置->环境变量->系统变量中找到Path,点击编辑,将安装路径添加到变量值中(注意:两个不同的路径之间用英文分号隔开),完成之后点击确定,这样将.py脚本文件直接拖到cmd.exe中,按enter键运行就可以执行,如下图所示:


对于怎么新建.py文件,可以首先新建一个txt文本文件,之后将其后缀改为.py,如何编写.py文件,可以下载编译器,我已上传编译器资源,大家可以下载

第二步:完成一个实例:C#调用一个Python脚本,脚本的执行结果为“Hello,World!”,并将执行结果显示到C#Form窗体的richTextbox中。

首先完成test01.py脚本文件的的编写,代码如下:

#import sys

#sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")

#print "hello,world"

def result():

    return "Hello,World!"

#就不用在意,代表代码被注释掉,定义了一个result函数,该函数返回的值是“Hello,World!”

其次在C#编译环境中添加test01.py文件,并且在添加完脚本文件之后,设置脚本文件的属性-“复制到输出目录”为始终复制

C#代码如下:

 private void Test01_Click(object sender, EventArgs e)

        {

            try

            {

                ScriptEngine ssa = Python.CreateEngine();

                ScriptScope ssb = ssa.CreateScope();

                ScriptSource ssc = ssa.CreateScriptSourceFromFile("test01.py");

                ssc.Execute(ssb);

                //var result = ssc.Execute<object>("result");

                var result = ssb.GetVariable<Func<object>>("result");

4000
                richTextBox1.Text = result().ToString();

            }

            catch(SystemException ex)

            {

                MessageBox.Show(ex.Message, "Error");

            }

        }

在C#使用Python脚本文件要注意的的是,首先要将IronPython2.7安装路径中的两个dll文件添加到C#引用中一个是IronPython.dll,另一个是Microsoft.Scripting.dll库文件;其次在代码中添加引用如下所示:

using IronPython.Hosting;//引用ironpython文件

using Microsoft.Scripting.Hosting;//引用ironpython文件

在此C#代码中有两个点需要注意:第1点首先要创建ScriptEngine、ScriptScope和 ScriptSource执行的文件资源,并且一定要先用.Execute执行要执行的脚本文件,如果不执行会报错,报错内容是找不到用的result函数

第2点,获取函数的返回值采用.GetVariable<Func<object>>方法,object是函数返回类型,如果不确定是什么类型,采用object类型,后面再跟函数的名称,特别注意在result定义之后调用时一定要加括号 result(),或者是函数中需要的参数,否则会报错

最终点击button按钮之后执行结果如下图所示:



以上是C#调用Python脚本的简单的例子,如有错误的地方请大家批评指正,谢谢大家!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: