Python实例--C#执行Python脚本,传参
# -*- 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
using System; using IronPython.Hosting;
using Microsoft.Scripting.Hosting; namespace ConsoleApp1
{ /// <summary>
/// 测试对象.
///
/// 用于传递数据给 Python 脚本
/// </summary>
public class TestDataObject
{
/// <summary>
/// 用户名.
/// </summary>
public string UserName { set; get; }
/// <summary>
/// 年龄.
/// </summary>
public int Age { set; get; }
/// <summary>
/// 描述信息.
/// </summary>
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);
} }
public class RunPython
{
public void RunPythonTest()
{
// 加载外部 python 脚本文件.
ScriptRuntime pyRumTime = Python.CreateRuntime();
dynamic obj = pyRumTime.UseFile("TestPythonFile.py"); // ==================================================
// 简单调用脚本文件中的方法.
Console.WriteLine(obj.welcome("Test C# Call Python."));
Console.WriteLine(obj.welcome("测试中文看看是否正常!")); // ==================================================
// 测试自定义对象.
TestDataObject testObj = new TestDataObject()
{
UserName = "张三",
Age = ,
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();
}
} } //-- 运行结果
//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#执行Python脚本,传参的更多相关文章
- expect脚本远程登录、远程执行命令和脚本传参简单用法
expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expe ...
- npm脚本传参问题
npm脚本传参问题(比如设置env参数) windows环境下: "build": "set NODE_ENV=dev&& gulp", &qu ...
- C# 服务里面调用Python.exe 来执行python文件
问题描述:在WCF服务里面通过调用python.exe来执行py文件,像下面这样py文件路径+参数,用空格隔开.会出现调用结果为空的现象 System.Diagnostics.ProcessStart ...
- python--脚本传参与shell脚本传参(位置参数)
写一个最简单的shell脚本,了解shell脚本是如何传参 1. vim test1.sh name=$1 age=$2 echo ${name} echo ${age} 2.调用脚本并传参 sh t ...
- shell 脚本传参
在 shell 中我们会见到 $0.$1.$2这样的符号,这是什么意思呢? 简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的sh ...
- python 执行文件时传参
## test.py ## ####################### import sys if __name__ == "__main__": args = sys.arg ...
- Python编程系列---使用装饰器传参+字典实现动态路由
# 实现一个空路由表,利用装饰器将url和功能函数的对应关系自动存到这个字典中 router_dict = {} # 定义一个装饰器 # 再给一层函数定义,用来传入一个参数,这个参数就是访问的页面地址 ...
- Python利用ctypes实现按引用传参
C的代码 void test_cref(char *a, int *b, char *data) { , sizeof(char)); strcpy(p, "cute"); a[] ...
- shell脚本传参执行spark-submit
读取多个目录下的本地文件,多个目录通过循环遍历的方式,以参数传递: #!/bin/bash i=0while [ $i -lt 10000 ] do echo "i=$i" spa ...
随机推荐
- 改变默认选择前1000行,编辑前200行【MSSQL】
- 【雅虎2017】一个在线展示广告的CVR预估框架实践
论文A Practical Framework of Conversion Rate Prediction for Online Display Advertising 定期更新,获取更多,欢迎sta ...
- elastic-job 的简单使用
说明:这个是使用2.1.5版本 elastic-job是当当开源的的的定时任务,使用也是很简单的,可以解决数据量的大的时候可以分片执行,多应用节点部署时候不会重复执行. 是通过zookeeper作为控 ...
- 伪装IP进行投票
伪装IP投票说明 1,目的 在访问网页链接进行投票时,网站往往对同一个IP的投票次数进行了限制,无法连续重复投票.为此可以使用“火狐浏览器+IP修改插件”,通过人为设置浏览器IP,绕过网站IP检查,可 ...
- git分支拉取
假设你已经配置好了各种SSH Key之类并熟悉基本的git创建分支.提交分支命令.比如共有2个分支,自己在一台未配置origin电脑上想要拉取某个分支(dev)到本地.步骤如下:1.新建git项目 与 ...
- SDK_按键消息的拦截
按键消息的拦截 拦截是为了在原有功能的基础上增加自己的操作 扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗 ...
- tp系统常量
ThinkPHP的公共入口文件里定义了系统常量 RUNTIME_PATH----系统运行时目录 LIB_PATH-----------系统核心类库目录 CORE_PATH--------Think类库 ...
- 重启rsyncd
systemctl restart rsyncd.service
- canvas练手项目(三)——Canvas中的Text文本
Canvas中的Text文本也是一个知识点~,我们需要掌握一下几个基本的Text操作方法 首先是重要参数textAlign和textBaseline: textAlign left center ri ...
- Jmeter - 获取返回结果中的字段值
Jmeter测试场景:一个web系统,需要先发送登录请求,获取到登录Token之后,后续每次请求都需要在请求头中附带Token才有权限操作.现在需要在Jmeter中自动获取每次登录请求返回的Token ...