Как выполнить программу командной строки из C # и получить результаты STD OUT? В частности, я хочу выполнить DIFF для двух файлов, которые программно выбраны, и записать результаты в текстовое поле.
c#
command-line
Крыло
источник
источник
Ответы:
Код от MSDN .
источник
{YourProcessObject}.StartInfo.Arguments
строку.p.StandardError
поток. Когда поток становится полным, кажется, что процесс будет остановлен до тех пор, пока данные не будут использованы, поэтому я должен прочитать обаStandardError
иStandardOutput
, чтобы гарантировать, что задача выполняется правильно.Вот быстрый пример:
источник
Есть еще один параметр, который я нашел полезным, который я использую, чтобы исключить окно процесса
это помогает полностью скрыть черное окно консоли от пользователя, если вы этого хотите.
источник
источник
process.StartInfo.RedirectStandardError = true;
иif (process.ExitCode == 0)
который принял ответ не имеет.Принятый ответ на этой странице имеет слабость, которая вызывает проблемы в редких ситуациях. Существует два дескриптора файла, в которые программы пишут по соглашению: stdout и stderr. Если вы просто прочитаете один дескриптор файла, такой как ответ от Ray, и программа, которую вы запускаете, записывает достаточно вывода в stderr, она заполнит буфер вывода stderr и заблокирует его. Тогда ваши два процесса зашли в тупик. Размер буфера может быть 4K. Это очень редко встречается в короткоживущих программах, но если у вас есть долго работающая программа, которая постоянно выводит в stderr, это произойдет в конце концов. Это сложно отладить и отследить.
Есть несколько хороших способов справиться с этим.
Один из способов - запустить cmd.exe вместо вашей программы и использовать аргумент / c для cmd.exe, чтобы вызвать вашу программу вместе с аргументом «2> & 1» для cmd.exe, чтобы он сказал объединить stdout и stderr.
Другой способ - использовать модель программирования, которая считывает обе ручки одновременно.
источник
источник
Вам нужно будет использовать
ProcessStartInfo
сRedirectStandardOutput
включенным - тогда вы сможете прочитать выходной поток. Возможно, вам будет проще использовать «>», чтобы перенаправить вывод в файл (через ОС), а затем просто прочитать файл.[править: как то, что сделал Рэй: +1]
источник
RedirectStandardOutput
самом деле проще в использовании .Если вы не возражаете против введения зависимости, CliWrap может упростить это для вас:
источник
Это может быть не самым лучшим / простым способом, но может быть вариантом:
Когда вы выполняете из своего кода, добавьте «> output.txt» и затем прочитайте в файле output.txt.
источник
Вы можете запустить любую программу командной строки, используя класс Process, и установить свойство StandardOutput экземпляра Process с помощью созданного вами средства чтения потоков (на основе строки или расположения в памяти). После того, как процесс завершится, вы можете делать все необходимые изменения в этом потоке.
источник
Это может быть полезно для кого-то, если вы пытаетесь запросить локальный ARP-кэш на ПК / сервере.
источник
Команда однострочного запуска:
Прочитать вывод команды в кратчайшем количестве кода reable:
источник
Существует класс ProcessHelper в открытом исходном коде PublicDomain, который может вас заинтересовать.
источник
Если вам также нужно выполнить какую-то команду в cmd.exe, вы можете сделать следующее:
Это возвращает только вывод самой команды:
Вы также можете использовать
StandardInput
вместоStartInfo.Arguments
:Результат выглядит так:
источник
Просто для удовольствия, вот мое законченное решение для получения вывода PYTHON - при нажатии кнопки - с отчетом об ошибках. Просто добавьте кнопку «butPython» и метку «llHello» ...
источник
Так как большинство ответов здесь не реализуют
using
statemant forIDisposable
и некоторые другие вещи, которые, я думаю, могут оказаться необходимыми, я добавлю этот ответ.Для C # 8.0
источник