2017-05-30 8 views
1

私は以下のコードを持っています。プロセス全体を取得する方法.StandardOutputを文字列として使用しますか?

 Process compiler = new Process(); 
     compiler.StartInfo.FileName = "cmd.exe"; 
     compiler.StartInfo.Arguments = ("/C git push gitlab --delete branch"); 
     compiler.StartInfo.UseShellExecute = false; 
     compiler.StartInfo.CreateNoWindow = false; 
     compiler.StartInfo.RedirectStandardOutput = true; 
     compiler.Start(); 
     string output = compiler.StandardOutput.ReadToEnd(); 
     compiler.WaitForExit(); 
     compiler.Close(); 

私は、出力画面で、以下のデータを得た.But string outputでのみnull値を取得します。

error: unable to delete 'branch': remote ref does not exist

error: failed to push some refs to ' https://gitlab.company.com/test2.git '

なぜoutput文字列にNULL値があるのですか? プロセスcompiler.StandardOutput.ReadToEnd();がその行をフェッチできなかったのはなぜですか?

falseCreateNoWindowに設定したため、コンソール画面で出力データを取得しました。そうでなければ、私はコンソール画面でデータを取得しませんでした。

Process.StandardOutPutから出力画面データを取得する方法をお勧めします。

+3

で所望の出力を得るには** stderr **、** stdout **ではなく、私は疑いがあります。 – arrowd

+1

@arrowdが正しいです。 'StandardError'もリダイレクト(読み込み)する必要があります – spender

+0

@arrowdが正しいです。stderrで出力を得ました。ありがとうたくさん:-) –

答えて

1

StandardOutputの読み込み時にnull値を取得する理由は、アプリケーションがその時点で何も書き込んでいないためです。

あなたがデータを読み取るために購読することができProcessに関連する2つのイベントがあります - これらの行が書き込まれているためOutputDataReceived and Exited

OutputDataReceived Documentation & Example

Exited Documentation & Example

+0

Gururajの最初のリンクが例を示しています。一部のプロセスは、プロセスが終了するまで情報をstdoutに記録しないことに注意してください。そのような場合、完了するまで何も手に入らないでしょう。例えば。セレンクロームドライバー。 –

+0

@JohnPeters - あなたは間違いなしです。このような場合、アプリケーションが正常に終了すると、終了イベントを使用して完全な情報を取得できます。プロセスが問題なく終了した場合、またはプロセスが終了した場合や終了した場合は、終了コードを確認することもできます。 – Gururaj

0

私はprocess.Standarderror

関連する問題