各位晚安
如標題所言
我要在C#中調用python程式
並且可以成功調用,取得回傳值了
但回傳值卻是cmd全部的文字內容
程式碼如下
Process p = new Process();
string cmd = @"cd C:\Users\Jack\Desktop\python\";
string cmd2 = @"python test.py --subtype OK & exit";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.RedirectStandardInput = true;
p.Start();
StreamWriter myStreamWriter = p.StandardInput;
myStreamWriter.WriteLine(cmd.ToString());
myStreamWriter.WriteLine(cmd2.ToString());
myStreamWriter.Close();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
p.Close();
txtUrl.Text = output;
輸出內容如下:
Microsoft Windows 版本 10.0.17134.706 2018 Microsoft Corporation. 著作權所有,並保留一切權利。C:\Program Files (x86)\IIS Express>cd C:\Users\Jack\Desktop\python\C:\Users\Jack\Desktop\python>python test.py --subtype OK & exitOK
字串結尾處的確是有取得回傳值"OK"了
但卻連前面執行過程的文字都包含進來了
求好心人解答
感謝
cmd有一個指令 'cls'(如果不是的話試試cln,clear...我忘了是什麼XD) 可以清空當前畫面,在輸出ok前先把畫面清除即可
另一個想法是
一行一行抓取,抓一行就捨棄前一行,抓到最後一行後再進行判斷內容~~~
您回傳的內容應該就那幾個(ok,1,0,false...),寫個regex去篩選判斷即可
可以改成使用ReadLine()
一次讀一行
使用EndOfStream
來判斷是否讀到訊息結尾
然後前面2段不要輸出就好
int count = 0;
string output = "";
while (!p.StandardOutput.EndOfStream)
{
output = p.StandardOutput.ReadLine();
if (count > 1)
Console.WriteLine(output);
count++;
}