C#使用Python脚本应用-传参和获取返回值

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

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

第二个方法,用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的第三方库确实有很多用起来很方便,如果在一门语言编写某个功能有点吃力的时候,可以考虑一下,用别的语言去实现,再去调用。

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

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180709A1QXKC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券