C#学习之调用Python脚本

公司有一个同事在自学Python,本家是学机电相关的专业。开始学编程跟我们抢饭碗,颤抖吧程序猿们,随时准备被淘汰吧~~~

每天这货下班了都在很努力的看视频,坚持了大半年了,不得不佩服~~~现在也是略有所成了,然后有一天问我有没有什么语言是写界面的(因为Python没有界面,但是网络上面抓取东西算是一绝啊。),然后刚刚好,C#对于简单的窗体信手掂来,于是乎就想实现一个窗体应用通过Python脚本来实现一个在线翻译的小软件。

然后就开始琢磨怎么来操作,果然网上还是一大堆资料,经过操作,稍作整理,说明一下大致的环境搭建以及会遇到的问题。

渐渐的爱上了visual studio 2017这个IDE,要啥有啥,因此环境搭建也是很简单,站在巨人的肩膀上,贼爽,就是不容易站稳。

--------------------------------------------------------------------------------------------------------

第一步:(引入dll)

完成以上操作后再项目中的引用中会多出一下几个dll

第二步:(在项目的debug下新建py脚本)

就定义了一个变量,然后我会去访问该变量。即可测试是否调用成功。

第三步:(在vs编写调用脚本)

ok,就是这么简单,就可以调用Python的脚本了!!!

接下来,在我操作过程中会遇到的一些问题做一个简单的解释以及解决办法。

--------------------------------------------------------------------------------------------------------

在这个过程我接触到了新的三个类ScriptEngine、ScriptScope、ScriptSource。这三个类的作用如下:

ScriptEngine: 动态语言(IronPython)执行类,可于解析和执行动态语言代码。

ScriptScope:构建一个执行上下文,其中保存了环境及全局变量;宿主(Host)可以通过创建不同的 ScriptScope 来提供多个数据隔离的执行上下文。

ScriptSource:操控动态语言代码的类型,可以编译(Compile)、运行(Execute)代码。

在读取脚本时遇到异常:“Non-ASCII character '\xe8' in file test.py

该错误是因为编码问题,默认的是ASCII编码,只需要在Python脚本首行声明一下编码就可以,加:

# -*- coding:utf-8 -*-

在引用了第三方模块(moudle)时,异常:IronPython.Runtime.Exceptions.ImportException:“No module named urllib.request”

这是因为C#里面找不到这个模块,这时候我需要添加该模块即可。

首先在Python里面通过

print(sys.modules["urllib.request"])

print(sys.modules["urllib.parse"])

输出模块地址,然后在C#脚本中加入输出模块地址,即Paths对象

对Python脚本的参数输入输出

ScriptScope类里面提供了该方法,使用也特别简单,如:py.GetVariable("result")即可获取result变量值,要注意C#获取的变量名和Python的变量名一定要统一。

ps:我之前的文章也介绍过C#和JavaScript之间的调用,但是都是基于visual studio这个平台。其实单单通过C#就能实现不管是通过JavaScript还是通过Python实现的功能,但是各有各的特点,需要做一个融合,不管怎么说还是利大于弊,这也是一个大的趋势,多平台兼容。Python爬虫感觉比java容易接受,上手速度更快,比竟Python已经加入了软件等级考试行列了,不容小视的Python,不过C#还是我的母语。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180107G0F4YJ00?refer=cp_1026

扫码关注云+社区