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 = 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();
        }
    }

}

//-- 运行结果
//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;
时间: 2024-11-10 11:32:41

Python实例--C#执行Python脚本,传参的相关文章

python 脚本传参 &nbsp;

import sys sys.argv[0] 代表脚本本身 sys.argv[1] 代表第一个参数 sys.argv[2] 代表第二个参数 例如: import sys print "传参数" ,sys.argv[0],sys.argv[1] python 脚本传参

Python脚本传参和Python中调用mysqldump

Python脚本传参和Python中调用mysqldump<pre name="code" class="python">#coding=utf-8 import MySQLdb import sys import os # 李红颖编写,用户湖南CLV数据分割使用 print 'dump database:',sys.argv[1] ##传入的第一个参数,数据库名称 print 'dump table:',sys.argv[2] ##传入的第二个参数,表

expect脚本远程登录、远程执行命令和脚本传参简单用法

expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expect: expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet. expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间. 远程登录lin

shell编程实例---实现整数的加减乘除余运算(利用read和脚本传参的方式)

1.read读取方式: [[email protected] scripts]# vim read_1.sh    1 #!/bin/bash   2 # Filename: read_1.sh   3 # Describe: Integer arithmetic   4 # Author: Lijun   5 # Date: 2015-08-24   6 # Version: 1.0.1   7     8 read -p "Please input two nums: " a b 

shell脚本传参

写了个脚本自动生成pdf上传github受不了每次相同的commit决定使用脚本传参 简单好用使用加粗方法,更复杂的可以参考下面两个详解. 如何给shell脚本传参数 http://jingyan.baidu.com/article/b24f6c822645b786bfe5daff.html #!/usr/bin/zsh xelatex -synctex=1 -interaction=nonstopmode "leetcode-cpp".tex > makepdf.log cd

python--脚本传参与shell脚本传参(位置参数)

写一个最简单的shell脚本,了解shell脚本是如何传参 1. vim test1.sh name=$1 age=$2 echo ${name} echo ${age} 2.调用脚本并传参 sh test1.sh zhangsan 14 11.  vim test1.py test1.py import sys try: if sys.argv[1]: print(sys.argv[1]) except Exception as e: print('当前无参数') 22.调用脚本并传参 原文地

shell 脚本传参

在 shell 中我们会见到  $0.$1.$2这样的符号,这是什么意思呢? 简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数 比如你新建了一个shell脚本 Test.sh, 内容如下: #!/bin/sh echo "shell脚本本身的名字: $0" echo "传给shell的第一个参数: $1" echo "传给shell的第二个参数: $2&quo

shell脚本传参执行spark-submit

读取多个目录下的本地文件,多个目录通过循环遍历的方式,以参数传递: #!/bin/bash i=0while [ $i -lt 10000 ] do echo "i=$i" spark-submit --class com.link.fblx.readFromPath --driver-memory 20G --executor-memory 20G --num-executors 1 --executor-cores 25 --total-executor-cores 25 --ja

企业内部网段检测有多少主机存活——shell脚本传参(二)

企业内部网段检测有多少主机存活 前言:这个脚本初衷来自于之前看了网络班苟国齐的空间发布的脚本,今天改版了一下,感觉挺方便的. 环境简介: IP地址段 外网 内网 10.0.0.0 Yes No 172.16.1.0 No Yes 1).编写脚本 [[email protected] oldboy20160103]# cat check_hosts.sh  #!/bin/bash #no.1 Check functions  [ ! -f /etc/ini.d/functions ] &&