C#调⽤python脚本的⽅法步骤(2种)
因项⽬需要,需要使⽤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:
writeline和write的区别pythonarr = 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.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.de("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()⽅式,调试有各种问题,最终放弃了,没有研究。以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论