c# 呼叫python突然出現問題,我之前用cmd呼叫python做GNSS,今天準備改改程式,手賤無聊用火絨清理下檔案與注冊表。然后未動之前成功的代碼,運行出現python輸出為null,我重新搞了python環境依然沒修好(py測驗檔案能從vs中啟動,并用cmd命令啟動輸出)。
部分代碼
public static void RunPythonScript(string sArgName, string args = "", params string[] teps)
{
Process p = new Process();
//string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + sArgName;// 獲得python檔案的絕對路徑(將檔案放在c#的debug檔案夾中可以這樣操作)
string path = @"D:\ana\Lib" + sArgName;//(因為我沒放debug下,所以直接寫的絕對路徑,替換掉上面的路徑了)
p.StartInfo.FileName = @"D:\ana\python.exe";//(注意:用的話需要換成自己的)沒有配環境變數的話,可以像我這樣寫python.exe的絕對路徑(用的話需要換成自己的)。如果配了,直接寫"python.exe"即可
string sArguments = path;
foreach (string sigstr in teps)
{
sArguments += " " + sigstr;//傳遞引數
}
sArguments += " " + args;
p.StartInfo.Arguments = sArguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = false;
p.Start();
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
Console.ReadLine();
p.WaitForExit();
}
//輸出列印的資訊
static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
{
string b;
Console.WriteLine(e.Data + Environment.NewLine);
string a = e.Data;
b = a;
string[] strArr = a.Split( ' ');
intArr= new double[strArr.Length];
for (int i = 0; i < strArr.Length; i++)
{
intArr[i] = Convert.ToDouble(strArr[i]);
}
a = b;
;
}
}
e.date 值為null ,我試著重新安裝運行程式并沒有作用。懷疑cmd沒有成功吊起python,或者StandardOutput出了問題。
uj5u.com熱心網友回復:
一個除錯方法是通過呼叫起 cmd 命令列,同時去掉 RedirectStandardOutput 等屬性的值,也就是設定 false 默認值然后由 cmd 命令啟動 Py 然后讓 Py 執行命令,此時你就可以看到 py 有沒有進行輸出,以及輸出的內容,根據輸出的內容才可以進行下一步除錯
如何在 cmd 傳入引數請看 [cmd.exe 的命令列啟動引數(可用于執行命令、傳參或進行環境配置) - walterlv](https://walterlv.com/post/cmd-startup-arguments.html )
[如何在 CMD 啟動的軟體傳入帶空格的路徑](https://blog.lindexi.com/post/%E5%A6%82%E4%BD%95%E5%9C%A8-CMD-%E5%90%AF%E5%8A%A8%E7%9A%84%E8%BD%AF%E4%BB%B6%E4%BC%A0%E5%85%A5%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E8%B7%AF%E5%BE%84.html )
uj5u.com熱心網友回復:
我程式之前可以運行,代碼沒改。估計還是環境配置出了問題。我剛才用standardoutput直接執行打包好的程式,控制臺成功現實資料,就不知道為什么這種方法出了問題。
uj5u.com熱心網友回復:
確實 py 環境問題比較多,最差方法,重新按照步驟再來一次
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/68119.html
標籤:C#
上一篇:參考型別與值型別
