Perl скрипт для захвата сообщений stderr без использования модуля Capture :: Tiny - PullRequest
0 голосов
/ 31 марта 2020

У меня была проблема с захватом сообщений stderr с помощью команды backticks, скажем, "make target" в perl. Поэтому я использовал модуль Capture :: Tiny для захвата сообщений stderr. Но у меня проблемы с его установкой, и я хочу узнать другие способы, кроме использования этого модуля.

Пожалуйста, дайте мне знать, если вы знаете что-либо.

С уважением, Poornima

1 Ответ

0 голосов
/ 31 марта 2020

С perldo c perlop :

Поскольку обратные пометки не влияют на стандартную ошибку, используйте синтаксис дескриптора файла оболочки (если оболочка поддерживает это), если вы хотите обратиться это. Чтобы захватить STDERR команды и STDOUT вместе:

$output = `cmd 2>&1`; 

Чтобы захватить STDOUT команды, но сбросить ее STDERR:

$output = `cmd 2>/dev/null`; 

Чтобы захватить STDERR команды, но сбросить ее STDOUT (упорядочение важно здесь):

$output = `cmd 2>&1 1>/dev/null`; 

Чтобы обменять STDOUT и STDERR команды для захвата STDERR, но оставить его STDOUT для выхода из старого STDERR:

$output = `cmd 3>&1 1>&2 2>&3 3>&-`; 

Чтобы прочитать обе команды STDOUT и его STDERR отдельно, проще всего перенаправить их отдельно в файлы, а затем прочитать из этих файлов после завершения программы:

system("program args 1>program.stdout 2>program.stderr");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...