2009-08-17 13 views
11

Próbuję uruchomić proces w języku C# przy użyciu klasy Proces.C# przekierowanie (potok) przetwarzanie danych wyjściowych do innego procesu

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

Tak więc na podstawie danych wprowadzonych przez użytkownika buduję wartość argumentu. Teraz mam przypadek, w którym muszę potokować wyjście p1 do innego procesu, powiedzmy grep. więc w zasadzie wypróbowałem ten

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

co zamierzałem jest coś takiego jak xyz.exe -info | grep 1234

ale to nie wydają się działać w .NET .. I rzeczywiście może utworzyć kolejną zmienną procesową i uciekaj „grep” jako oddzielny proces ... Ale zastanawiałem się, czy jest jakikolwiek sposób, aby zrobić, jak próbować powyżej ..

+0

Znalazłem ten artykuł na blogu, który zawiera dokładnie to pytanie: [Używanie przekierowania wyjścia potokowego w klasach Process/ProcessStartInfo ...] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

Jeśli nie chcesz używać CMD, sprawdź bibliotekę [MedallionShell] (https://github.com/madelson/MedallionShell). Ułatwia to przekierowanie strumienia procesowego (i inne aspekty zarządzania procesami). – ChaseMedallion

Odpowiedz

19

O wiele łatwiejszy sposób byłoby zrobić po prostu użyć cmd jako procesu.

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

Można przechwytywać dane wyjściowe lub cokolwiek innego niż normalny proces. To był tylko szybki test, który zbudowałem, ale testowanie wyjścia działa na konsolę, więc oczekiwałbym, że będzie to działało w przypadku wszystkich innych planów, które planujesz wykonać z rurociągiem. Jeśli chcesz, aby polecenie pozostało otwarte, użyj/K zamiast/C, a okno nie zamknie się po zakończeniu procesu.

+0

Dzięki, że uratowałeś mój dzień :) – FatDaemon

+1

Muszę zrobić to samo bez cmd na Linuksie. Jak mogę połączyć StreamReader procesu źródłowego ze StreamWriter w procesie docelowym? –

+1

i jak to zrobić w Linuksie? :) – knocte

Powiązane problemy