第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在.NET中生成進(jìn)程并捕獲其STDOUT?

如何在.NET中生成進(jìn)程并捕獲其STDOUT?

撒科打諢 2019-07-02 10:28:53
如何在.NET中生成進(jìn)程并捕獲其STDOUT?我需要生成一個作為控制臺應(yīng)用程序的子進(jìn)程,并捕獲它的輸出。我為一個方法編寫了以下代碼:string retMessage = String.Empty;ProcessStartInfo startInfo = new ProcessStartInfo();Process p = new Process(); startInfo.CreateNoWindow = true;startInfo.RedirectStandardOutput = true;startInfo.RedirectStandardInput = true; startInfo.UseShellExecute = false;startInfo.Arguments = command;startInfo.FileName = exec;p.StartInfo = startInfo ;p.Start();p.OutputDataReceived += new DataReceivedEventHandler(     delegate(object sender, DataReceivedEventArgs e)     {         using (StreamReader output = p.StandardOutput)         {             retMessage = output.ReadToEnd();         }     });p.WaitForExit();return retMessage;然而,這不會返回任何東西。我不相信OutputDataReceived事件正在被回調(diào),或者WaitForExit()命令可能阻塞線程,因此它將永遠(yuǎn)不會回調(diào)。有什么建議嗎?編輯:看來我對回調(diào)太費(fèi)勁了。做:return p.StandardOutput.ReadToEnd();似乎運(yùn)轉(zhuǎn)良好。
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個贊

這是我驗(yàn)證過的代碼。我使用它來生成MSBuild并監(jiān)聽它的輸出:


process.StartInfo.UseShellExecute = false;

process.StartInfo.RedirectStandardOutput = true;

process.OutputDataReceived += (sender, args) => Console.WriteLine("received output: {0}", args.Data);

process.Start();

process.BeginOutputReadLine();


查看完整回答
反對 回復(fù) 2019-07-02
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊

我需要捕獲stdout和stderr,如果進(jìn)程沒有在預(yù)期的情況下退出,則需要超時。我想出了這個:


Process process = new Process();

StringBuilder outputStringBuilder = new StringBuilder();


try

{

process.StartInfo.FileName = exeFileName;

process.StartInfo.WorkingDirectory = args.ExeDirectory;

process.StartInfo.Arguments = args;

process.StartInfo.RedirectStandardError = true;

process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

process.StartInfo.CreateNoWindow = true;

process.StartInfo.UseShellExecute = false;

process.EnableRaisingEvents = false;

process.OutputDataReceived += (sender, eventArgs) => outputStringBuilder.AppendLine(eventArgs.Data);

process.ErrorDataReceived += (sender, eventArgs) => outputStringBuilder.AppendLine(eventArgs.Data);

process.Start();

process.BeginOutputReadLine();

process.BeginErrorReadLine();

var processExited = process.WaitForExit(PROCESS_TIMEOUT);


if (processExited == false) // we timed out...

{

    process.Kill();

    throw new Exception("ERROR: Process took too long to finish");

}

else if (process.ExitCode != 0)

{

    var output = outputStringBuilder.ToString();

    var prefixMessage = "";


    throw new Exception("Process exited with non-zero exit code of: " + process.ExitCode + Environment.NewLine + 

    "Output from process: " + outputStringBuilder.ToString());

}

}

finally

{                

process.Close();

}

我正在將stdout和stderr連接到相同的字符串中,但是如果需要的話,您可以將它分開。它使用事件,所以它應(yīng)該處理它們的到來(我相信)。我已經(jīng)成功地運(yùn)行了這個程序,并將很快進(jìn)行卷測試。


查看完整回答
反對 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 591 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號