2009-08-17 4 views
11

프로세스 클래스를 사용하여 C#에서 프로세스를 실행하려고합니다.C# 프로세스를 다른 프로세스로 리다이렉트 (파이프 처리)

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"; 실제로 별도의 같은 다른 프로세스 변수 및 실행 "그렙"을 만들 수 있습니다 .. 그렙 1234

그러나 이것은 .NET에서 작동하지 않는 것 | 내가 의도

는 xyz.exe -info 같은 것입니다 프로세스 ..하지만 만약 내가 위에 시도하는 것처럼 어떤 방법으로 궁금 해서요.

+0

정확하게이 질문을 다루는이 블로그 기사가 발견되었습니다. [Process/ProcessStartInfo 클래스에서 파이프 출력 리디렉션 사용] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/) 81370.aspx) –

+0

CMD를 사용하지 않으려면 [MedallionShell] (https://github.com/madelson/MedallionShell) 라이브러리를 확인하십시오. 프로세스 스트림 리디렉션 (및 프로세스 관리의 다른 측면)을 훨씬 단순하게 만듭니다. – ChaseMedallion

답변

19

훨씬 쉬운 방법은 그냥 프로세스로 cmd를 사용하는 것입니다.

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

정상적인 처리와 같이 원하는대로 출력을 캡처 할 수 있습니다. 이것은 내가 작성한 간단한 테스트 였지만 테스트를 콘솔에 출력하므로 파이프로 작업 할 때 계획 할 작업이 필요합니다. 이 명령을 계속 사용하려면/C 대신/K를 사용하면 프로세스가 완료되면 창이 닫히지 않습니다.

+0

감사합니다. 내 하루를 저장했습니다 :) – FatDaemon

+1

나는 리눅스에서 cmd없이 같은 일을 할 필요가있다. 원본 프로세스의 StreamReader를 대상 프로세스의 StreamWriter와 어떻게 연결할 수 있습니까? –

+1

및 Linux에서이를 수행하는 방법? :) – knocte

관련 문제