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的第三方庫確實有很多用起來很方便,如果在一門語言編寫某個功能有點吃力的時候,可以考慮一下,用別的語言去實現,再去調用。
最後來一張過年過節的心情圖。
※Python數據分析常見庫介紹之Pandas
※Github上最受歡迎的Python框架Flask入門
TAG:Python |