因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘。

只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对的是python脚本中包含第三方模块的情况。不管哪种方式,首先都需要安装IronPython。我是通过vs2017的工具->NuGet包管理器->管理解决方案的NuGet包,搜索IronPython包安装,也可以在官网下载安装包自行安装后添加引用即可。

方式一:适用于python脚本中不包含第三方模块的情况

C#代码

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

using System;

namespace CSharpCallPython

{

class Program

{

static void Main(string[] args)

{

ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象

dynamic py = pyEngine.ExecuteFile(@"test.py");//读取脚本文件

int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 };

string reStr = py.main(array);//调用脚本文件中对应的函数

Console.WriteLine(reStr);

Console.ReadKey();

}

}

}

python脚本

def main(arr):

try:

arr = set(arr)

arr = sorted(arr)

arr = arr[0:]

return str(arr)

except Exception as err:

return str(err)

结果

方式二:适用于python脚本中包含第三方模块的情况

C#代码

using System;

using System.Collections;

using System.Diagnostics;

namespace Test

{

class Program

{

static void Main(string[] args)

{

Process p = new Process();

string path = "reset_ipc.py";//待处理python文件的路径,本例中放在debug文件夹下

string sArguments = path;

ArrayList arrayList = new ArrayList();

arrayList.Add("com4");

arrayList.Add(57600);

arrayList.Add("password");

foreach (var param in arrayList)//添加参数

{

sArguments += " " + sigstr;

}

p.StartInfo.FileName = @"D:\Python2\python.exe"; //python2.7的安装路径

p.StartInfo.Arguments = sArguments;//python命令的参数

p.StartInfo.UseShellExecute = false;

p.StartInfo.RedirectStandardOutput = true;

p.StartInfo.RedirectStandardInput = true;

p.StartInfo.RedirectStandardError = true;

p.StartInfo.CreateNoWindow = true;

p.Start();//启动进程

Console.WriteLine("执行完毕!");

Console.ReadKey();

}

}

}

python脚本

# -*- coding: UTF-8 -*-

import serial

import time

def resetIPC(com, baudrate, password, timeout=0.5):

ser=serial.Serial(com, baudrate, timeout=timeout)

flag=True

try:

ser.close()

ser.open()

ser.write("\n".encode("utf-8"))

time.sleep(1)

ser.write("root\n".encode("utf-8"))

time.sleep(1)

passwordStr="%s\n" % password

ser.write(passwordStr.encode("utf-8"))

time.sleep(1)

ser.write("killall -9 xxx\n".encode("utf-8"))

time.sleep(1)

ser.write("rm /etc/xxx/xxx_user.*\n".encode("utf-8"))

time.sleep(1)

ser.write("reboot\n".encode("utf-8"))

time.sleep(1)

except Exception:

flag=False

finally:

ser.close()

return flag

resetIPC(sys.argv[1], sys.argv[2], sys.argv[3])

上面的python脚本实现的是重启IPC设备,测试功能成功。

调用包含第三方模块的python脚本时,尝试过使用path.append()方式,调试有各种问题,最终放弃了,没有研究。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

c#调用python函数_C#调用python脚本的方法步骤(2种)相关推荐

  1. c调用python函数_C调用Python的函数

    1 /*2 module: Python脚步的模块名3 function: 要调用的函数名4 format: 传递给Py_VaBuildValue函数的可变参数模板5 */6 intPyCall(co ...

  2. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  3. python 定义函数方法,python中函数如何定义?python函数的调用方法介绍

    本篇文章给大家带来的内容是关于python中函数如何定义?python函数的调用方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 函数的概念,函数是将具有独立功能的代码块 ...

  4. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  5. 父类指针指向子类实例,用父类指针调用虚函数,调用的是子类的函数还是父类的函数...

    父类指针指向子类实例,用父类指针调用虚函数,调用的是子类的函数还是父类的函数 以下程序的显示结果是什么,为什么 #include <iostream> using namespace st ...

  6. java 调用js脚本_Java中使用JavaScript脚本的方法步骤

    简介 Nashorn Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引 ...

  7. shell调用python函数_shell调用python函数

    最近遇到一个需求,需要通过shell调用python中的一个函数,发现其实也挺简单的: python脚本如下: test.py: import ConfigParser config = Config ...

  8. c++调用python原理_C++调用Python浅析

    环境 VS2005Python2.5.4 Windows XP SP3 简述 一般开发过游戏的都知道Lua和C++可以很好的结合在一起,取长补短,把Lua脚本当成类似动态链接库来使用,很好的利用了脚本 ...

  9. python 函数的调用的时候参数的传递_Python Unittest;如何获取调用函数时传递的参数?...

    我试图做一个单元测试来检查这个python函数(dispatch)是否传递了正确的参数来处理\u结果.在 在dispatch中调用处理"unu result"的函数时,有没有方法& ...

最新文章

  1. Python设计模式-代理模式
  2. python—— 写入错误UnicodeEncodeError的解决办法
  3. 掌握 analyze API,一举搞定 Elasticsearch 分词难题
  4. Windows文件被占用解决办法
  5. matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...
  6. Python-流程控制之循环
  7. Mono for Android 对话框 倒计时
  8. java备份还原mysql数据库_Java备份还原Mysql数据库
  9. Linux内存实际使用率
  10. 关于遥感图像的控制点片匹配算法的一点想法(一)
  11. angularjs directive指令 link在渲染完成之后执行
  12. 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文
  13. vue组件(Vue+webpack项目实战系列之三)
  14. Xplanner 项目规划跟踪工具
  15. 烧钱两年,做事对得起工资,也要对得起公司这份决心
  16. c++程序无法进入断点的原因
  17. gflags的交叉编译
  18. 手机电视标准对峙激化
  19. 分治法求最大值c语言思想,整数的除法 分治思想 求最大子向量和
  20. 当下社会和经济形势概述

热门文章

  1. docker run 原理
  2. SpringBoot整合Spring Security——第三章异常处理
  3. 使用 LxRunOffine 迁移 WSL Ubuntu安装目录
  4. Java获取页面中所有图片的地址
  5. 机械加工工艺师手册_机械加工工艺师——机床应用篇
  6. uart——51程序
  7. 为啥八位的计算机可以用补码表示-128
  8. Find Integer(费马大定理的使用)
  9. 2.3.3 操作系统之实现临界区进程互斥的硬件实现方法
  10. java 去除干扰_【Selenium-WebDriver实战篇】Java丨验证码图片去除干扰像素,方便验证码的识别(转)...