该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

C# 调用 Python 脚本

操作步骤

1.创建一个控制台程序. O0101_DotNetCallPython.

2.管理 Nuget 程序包,搜索 IronPython , 然后安装。

此操作会自动完成下列操作。

已将引用“IronPython”添加到项目“O0101_DotNetCallPython”

已将引用“IronPython.Modules”添加到项目“O0101_DotNetCallPython”

已将引用“IronPython.SQLite”添加到项目“O0101_DotNetCallPython”

已将引用“IronPython.Wpf”添加到项目“O0101_DotNetCallPython”

已将引用“Microsoft.Dynamic”添加到项目“O0101_DotNetCallPython”

已将引用“Microsoft.Scripting.AspNet”添加到项目“O0101_DotNetCallPython”

已将引用“Microsoft.Scripting”添加到项目“O0101_DotNetCallPython”

已将引用“Microsoft.Scripting.Metadata”添加到项目“O0101_DotNetCallPython”

3.添加Python文件到当前的项目中

创建一个文本文件命名为:hello.py,

内容如下:

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

# 第一行的目的,是为了让代码里面,可以有中文注释信息. (否则要运行报错)

# 这个 Python 脚本, 用于被 C# 来调用.

# 简单测试 Hello World 的效果.

def welcome(name):

return "hello " + name

# 测试 参数为 C# 对象的效果. (获取/设置 C# 对象的属性)

def testAddAge(obj):

obj.Age = obj.Age + 1

obj.Desc = obj.UserName + "又大了一岁 in Python."

# 测试 参数为 C# 对象的效果. (调用 C# 对象的方法)

def testAddAge2(obj):

obj.AddAge(2)

# 测试 List.

def testList(lst):

vResult = ""

for each_item in lst:

vResult = vResult + " " + each_item

return vResult

# 测试 Set.

def testSet(pSet):

vResult = ""

for each_item in pSet:

vResult = vResult + " " + each_item

return vResult

# 测试 Dictionary

def testDictionary(pDictionary):

vResult = ""

for each_item in pDictionary:

vResult = vResult + " " + each_item + "=" + pDictionary[each_item] + ";"

return vResult

把该文件添加的当前的项目中。

在 Visual Studio 中,将该文件包含在项目中

复制到输出目录:如果较新则复制

生成操作:无

4. 编写C# 代码, 调用 hello.py 脚本文件中定义的方法

内容如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

namespace O0101_DotNetCallPython

{

class Program

{

static void Main(string[] args)

{

// 加载外部 python 脚本文件.

ScriptRuntime pyRumTime = Python.CreateRuntime();

dynamic obj = pyRumTime.UseFile("hello.py");

// ==================================================

// 简单调用脚本文件中的方法.

Console.WriteLine(obj.welcome("Test C# Call Python."));

Console.WriteLine(obj.welcome("测试中文看看是否正常!"));

// ==================================================

// 测试自定义对象.

TestDataObject testObj = new TestDataObject()

{

UserName = "张三",

Age = 20,

Desc = "",

};

Console.WriteLine("调用脚本前对象数据:{0}", testObj);

obj.testAddAge(testObj);

Console.WriteLine("调用 testAddAge 脚本后,对象数据={0}", testObj);

obj.testAddAge2(testObj);

Console.WriteLine("调用 testAddAge2 脚本后,对象数据={0}", testObj);

// ==================================================

// 测试 List.

IronPython.Runtime.List testList = new IronPython.Runtime.List();

testList.Add("List数据1");

testList.Add("List数据2");

testList.Add("List数据3");

// 测试参数为 List.

string result = obj.testList(testList);

Console.WriteLine("调用 testList , 返回结果:{0}", result);

// ==================================================

// 测试 Set.

IronPython.Runtime.SetCollection testSet = new IronPython.Runtime.SetCollection();

testSet.add("Set数据1");

testSet.add("Set数据2");

testSet.add("Set数据3");

// 测试参数为 Set.

result = obj.testSet(testSet);

Console.WriteLine("调用 testSet , 返回结果:{0}", result);

// ==================================================

// 测试 Dictionary.

IronPython.Runtime.PythonDictionary testDictionary = new IronPython.Runtime.PythonDictionary();

testDictionary["Key1"] = "Value1";

testDictionary["Key2"] = "Value2";

testDictionary["Key3"] = "Value3";

// 测试参数为 Dictionary.

result = obj.testDictionary(testDictionary);

Console.WriteLine("调用 testDictionary , 返回结果:{0}", result);

Console.ReadLine();

}

}

///

/// 测试对象.

///

/// 用于传递数据给 Python 脚本

///

public class TestDataObject

{

///

/// 用户名.

///

public string UserName { set; get; }

///

/// 年龄.

///

public int Age { set; get; }

///

/// 描述信息.

///

public string Desc { set; get; }

public void AddAge(int age)

{

this.Age = this.Age + age;

this.Desc = String.Format("{0}又大了{1}岁 in C#", this.UserName, age);

}

public override string ToString()

{

return String.Format("姓名:{0}; 年龄:{1}; 描述:{2}", this.UserName, this.Age, this.Desc);

}

}

}

-- 运行结果

hello Test C# Call Python.

hello 测试中文看看是否正常!

调用脚本前对象数据:姓名:张三; 年龄:20; 描述:

调用 testAddAge 脚本后,对象数据=姓名:张三; 年龄:21; 描述:张三又大了一岁 in Py

thon.

调用 testAddAge2 脚本后,对象数据=姓名:张三; 年龄:23; 描述:张三又大了2岁 in C#

调用 testList , 返回结果: List数据1 List数据2 List数据3

调用 testSet , 返回结果: Set数据1 Set数据2 Set数据3

调用 testDictionary , 返回结果: Key3=Value3; Key2=Value2; Key1=Value1;

python c#_【分享】C# 调用 Python 脚本, 与 Python 调用 C# 类库相关推荐

  1. python制作浏览器插件_分享一个火车浏览器脚本插件python中文分词

    最近在采集一批信息,发现火车浏览器的自带分词插件,分词效果不是很理想,在网上找了一个API分词接口:pullword 其实对于火车浏览器脚本插件用PHP和python都可以写,之前做了一个PHP分词插 ...

  2. 南通大学python期末考试试卷答案_南通大学自动评教脚本(python)

    临近期末我等学沫都在紧张的进行着复习(预习),本来时间就不多,居然还让我们去评教万一因为这点时间我们挂科了咋办,于是乎用半生不熟的python写个自动评教的脚本. 一,具体分析: 我们先来评一个抓包来 ...

  3. 人生苦短我用python梗_为什么说人生苦短,我用Python?

    原标题:为什么说人生苦短,我用Python? 首先,我们要认识到,什么是脚本? 脚本的本质是什么? 它就是一段代码,只不过让对应的解释器执行即可:和它相对应的是编译型代码,需要编译成可执行文件或者目标 ...

  4. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤

    在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd ...

  5. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  6. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  7. python 监测_理解监测指标,并使用Python去监测它们

    通过学习这些关键的术语和概念来理解 Python 应用监测. 当我***次看到术语"计数器counter"和"计量器gauge"和使用颜色及标记着"平 ...

  8. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...

  9. ds证据理论python实现_你好,Julia!再见,Python!

    点击上方蓝色字体关注"职业蛙",带你轻松拿offer! 今 日 福 利 后台回复关键词"DS" ,领取: 数据科学精选福利包  包括:Julia数据科学应用.S ...

  10. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

最新文章

  1. jquery easyui datagrid mvc server端分页排序筛选的实现
  2. 2016-04-25-信息系统实践手记5-CACHE设计一例
  3. 『设计模式』职责链模式(Chain of Responsibility) 可怜的加薪、请假之路
  4. GRPC在网页前端的使用
  5. 垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器
  6. php文件怎么制定编码格式,php文件编码格式对结果有影响
  7. 电子商务型网站该如何选择虚拟主机
  8. 【网络信息安全】授权与访问控制
  9. 解决android webkit的css postion:fixed支持问题
  10. windows处理回车和Linux,linux与windows回车换行符的区别
  11. 汽车UDS诊断详解及Vector相关工具链使用说明——总述
  12. 【动手学深度学习】01 Windows下安装环境
  13. 打开Word,显示无法创建工作文件,请检查临时环境变量的解决办法
  14. 蚂蚁金服是如何提高移动端体验的?
  15. dumprep 0 -u 到底是什么东西?
  16. mongodb可视化工具 mac版 Studio 3T破解
  17. 2020年度总结 | 葡萄城软件开发技术回顾
  18. python实现中文数字转为阿拉伯数字
  19. 为 Nexus 5 准备的 Sailfish 移植版本
  20. 初试 Kubernetes 集群使用 CephFS 文件存储

热门文章

  1. 视觉直观感受 7 种常用的排序算法
  2. 从d2来看前端的未来
  3. android 解决ListView点击与滑动事件冲突
  4. str_repeat() 函数
  5. 我学到的C#——基础
  6. 伟人必须回答的(二十道问题)
  7. 银江科技企业课堂小结
  8. Java Socket通信编程
  9. 解决Oracle启动失败
  10. 4.12 《硬啃设计模式》 第29章 行为型设计模式小结