vba得到python传回的值_C#使用Python脚本应用-传参和获取返回值

本文介绍了如何在C#应用程序中调用和交互Python脚本,包括使用IronPython库和通过运行编译后的Python文件。讨论了两种方法的优缺点,如IronPython在处理第三方库时的挑战,以及直接运行Python文件需要预装Python环境的不便。示例代码展示了如何传递参数和接收返回值,用于交换机配置备份的功能。
摘要由CSDN通过智能技术生成

python脚本语言对于运维来说是非常方便的,特别是第三方库,但是我的桌面应用是c#写的,所以我要考虑怎么去让c#能去调用,赋值和传参python,有两种方法,但是都有利弊,希望有更好方法的小伙伴能分享一下。

64977671250740b4aa485d7390a6c71112374763.jpg

第一个方法,在vs的NuGet包里,有一个IronPython包,IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,使用动态类型系统以让更多脚本语言能很容易地移植到NET Framework上。如果不使用第三方库,这个软件相当完美,但是使用第三方库的时候就各种问题来了,第一,不能使用pip安装,pip安装没有.egg文件,必须引用.egg的文件才能使用。第二,安装过程的繁琐性,反正我试了一下,就不想在体验第二遍了。百度搜索的基本上都是这个方法的介绍。

7a2c853dc4f1489aa8c4fa9432983b5a24839246.jpg

第二个方法,用python编译好文件,*.py,在c#中用流的方式打开,修改,然后保存,在模拟dos环境下运行,获取返回值。传参和返回都能实现,但是弊端就是还要在电脑上装python和第三方库。下面我们来看下这种方法的实现。

首先定义一个方法。通过cmd去运行python程序,并且获取它的返回值。

private void Result(string mingling)

{

Process CmdProcess = new Process();

CmdProcess.StartInfo.FileName = "cmd.exe";

CmdProcess.StartInfo.CreateNoWindow = true; // 不创建新窗口

CmdProcess.StartInfo.UseShellExecute = false; //不启用shell启动进程

CmdProcess.StartInfo.RedirectStandardInput = true; // 重定向输入

CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出

CmdProcess.StartInfo.RedirectStandardError = true; // 重定向错误输出

CmdProcess.StartInfo.Arguments = "/c " + mingling;//“/C”表示执行完命令后马上退出

CmdProcess.Start();//执行

StreamReader reader = CmdProcess.StandardOutput;

while (!reader.EndOfStream)

{

listBox1.Items.Add(reader.ReadLine());

}

}

运行里面程序,并对里面进行修改。

private void button1_Click(object sender, EventArgs e)

{

listBox1.Items.Clear();

string[] lines = File.ReadAllLines(@"command.py");//打开相对路径的python程序

//修改第五列,第六列的数据,当然也可以是一个空的*.py,全部命令都修改进去,我这里举个例子

lines[4] = "client.connect("" + textBox1.Text + "", username="" + textBox2.Text + "", password="" + textBox3.Text + "")";//从textbox里面获取账号密码进行登录

lines[5] = "stdin, stdout, stderr = client.exec_command('tftp " + textBox4.Text + " put startup.cfg " + textBox1.Text + ".txt')";//修改参数,tftp保存交换机配置命令

File.WriteAllLines(@"command.py", lines, Encoding.UTF8);

Result(@"command.py");

}

我这是一个交换机配置备份的一个功能,IP,用户名,密码写进去,交换机实现配置保存,返回结果显示在listbox上面,IP,用户名,密码可以从控件里面得到,也可以自己写在一个txt里面读取也可以,固定下来,写个循环,每天点一下就可以导出,后面扩展还可以实现配置对比。

这两种方法都可以实现对python脚本传参和返回信息。python的第三方库确实有很多用起来很方便,如果在一门语言编写某个功能有点吃力的时候,可以考虑一下,用别的语言去实现,再去调用。

最后来一张过年过节的心情图。

ee24988fbd86479b87a791e1f0a8b72712515188.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值