С# переадресация (pipe) вывода процесса в другой процесс

Я пытаюсь запустить процесс в С# с помощью класса Process.

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

Итак, основываясь на пользовательском вводе, я создаю значение аргумента. Теперь у меня есть случай, когда мне нужно вывести вывод p1 в другой процесс, скажем grep. поэтому я в основном пробовал это

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

то, что я намеревался, это что-то вроде xyz.exe -info | grep 1234

но это, похоже, не работает .net. Я могу создать другую переменную процесса и запустить "grep" как отдельный процесс. Но мне было интересно, есть ли способ сделать так,..

Ответ 1

Намного проще будет просто использовать cmd как ваш процесс.

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

Вы можете захватить вывод или что-то еще, что вы хотите, как любой обычный процесс. Это был просто быстрый тест, который я построил, но он работает, выводя тестирование на консоль, поэтому я ожидаю, что это сработает для всего, что вы планируете делать с трубопроводом. Если вы хотите, чтобы команда оставалась открытой, используйте /K вместо/C, и окно не будет закрываться после завершения процесса.