Может ли IPC :: System :: Простой захват STDERR? - PullRequest
3 голосов
/ 06 ноября 2010

Я хотел бы вызвать скрипт из моего кода Perl и захватить его STDERR и STDOUT, объединенные вместе.

Я обычно использую capture из IPC::System::Simple, но кажется, что ti не позволяет захватывать STDERR.

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010

Вы можете перенаправить STDERR (дескриптор файла 2) в STDOUT (дескриптор файла 1) с помощью 2>&1.

С perlop на операторе qx//:

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

$ output = `cmd 2> & 1`;

2 голосов
/ 06 ноября 2010

В системе POSIX вы можете делать следующее.В Windows это будет работать в cygwin .

my @lines = capture("some command 2>&1");

Однако, если вы хотите отличить строки STDERR от строк STDOUT, возможно, вам нужно использовать IPC :: Open3 или неверно названный IPC :: Open3 :: Util .

...