C # Piping Linux команды вывода в процессе - PullRequest
0 голосов
/ 01 сентября 2018

У меня проблемы с классом Process для передачи команды в системе Linux.

Я хочу выполнить следующую команду: rpm2cpio repo.rpm | cpio -divm

Я пробовал

process.StartInfo.FileName = "rpm2cpio;
rocess.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.Arguments = "repo.rpm | cpio - idmv";

Но программа зависает.

Аналогичным образом я попытался сохранить выходные данные из rpm2cpio в строку или выходной файл, а затем передать их в качестве аргумента команды cpio, но он также зависает.

process.StartInfo.FileName = "cpio";
rocess.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.Arguments = "-idvm < output.txt";
// or
process.StartInfo.Arguments = "-idvm < " + rp2cpio_output;

Каким образом я могу заставить это работать? Я видел этот пост с решением, но он в системе Windows. Как сделать то же самое в Linux?

1 Ответ

0 голосов
/ 01 сентября 2018

Установка process.StartInfo.RedirectStandardOutput=true заставит программу перенаправить стандартный вывод в поток process.StartInfo.StandardOutput. Когда это произойдет, программа будет зависать, пока вы не прочитаете из стандартного вывода.

Чтобы получить поведение, которое, я думаю, вы ищете, вам просто нужно установить RedirectStandardOutput=false. Таким образом, каналы и перенаправления в вашей команде будут работать как положено.

...