2009-08-17 11 views
11

Processクラスを使用してC#でプロセスを実行しようとしています。c#redirect(pipe)別のプロセスに出力を処理する

Process p1 = new process(); 
p1.startinfo.filename = "xyz.exe"; 
p1.startinfo.arguments = //i am building it based on user's input. 
p1.start(); 

したがって、ユーザーの入力に基づいて、私は引数の値を構築しています。今私はp1の出力をgrepという別のプロセスにパイプしなければならないケースがあります。だから私は基本的にこれを試した

p1.startinfo.arguments = "-info | grep 1234";

私は何を意図するxyz.exe -infoようなものです| grepを1234

が、これは.NETで動作するようには思えない..私は実際には別個のものとして、別のプロセス変数と実行「はgrep」を作成することができますIAMは、上記試すよう行うにはどのような方法がある場合、プロセスは..しかし、私は自分のプロセスとしてcmdを使う行うことであろう。..

+0

私は正確にこの質問をカバーして、このブログの記事を見つけました:[プロセス/ ProcessStartInfoクラスのパイプ出力リダイレクションを使用して...](http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

CMDを使用しない場合は、[MedallionShell](https://github.com/madelson/MedallionShell)ライブラリを参照してください。プロセスストリームリダイレクション(およびプロセス管理の他の側面)をはるかに簡単にします。 – ChaseMedallion

答えて

19

もっと簡単な方法を疑問に思いました。

Process test = new Process(); 
test.StartInfo.FileName = "cmd"; 
test.StartInfo.Arguments = @"/C ""echo testing | grep test"""; 
test.Start(); 

通常の処理のように出力をキャプチャすることができます。これは私が構築した簡単なテストでしたが、テストをコンソールに出力していますので、これは配管でやる予定の他のものについてはうまくいくと思います。コマンドを開いたままにしたい場合は、/ Cの代わりに/ Kを使用してください。プロセスが終了すると、ウィンドウは閉じません。

+0

ありがとう私の日を保存しました:) – FatDaemon

+1

私はLinux上でcmdなしで同じことをする必要があります。ソースプロセスのStreamReaderとターゲットプロセスのStreamWriterをどのように接続できますか? –

+1

とそれをLinuxで行う方法は? :) – knocte

関連する問題