Получить как STDOUT, так и STDERR программы или скрипта в переменную в perl

Я много гуглил, чтобы перенаправить как STDOUT, так и STDERR программы на переменную в Perl. Сначала я пытался использовать как open, так и обратные кавычки, но не смог зафиксировать сигнал ошибки к переменной.

Я публикую этот вопрос, потому что теперь у меня есть решение, и надеюсь, что оно поможет другим.


person HateStackOverFlow    schedule 29.09.2017    source источник


Ответы (1)


Чтобы получить как STDOUT, так и STDERR в переменную, используйте следующий фрагмент кода, используя обратные апострофы (``).

Убедитесь, что 2>&1 находится в конце вашей команды, чтобы перенаправить STDERR в STDOUT.

Если указана неверная команда,

my $Temp_return;
$Temp_return = `lse 2>&1`;
print "return = " . $Temp_return . "\n";

Вывод ошибки

return = 'lse' is not recognized as an internal or external command, operable program or batch file.

Для правильной команды вы получите соответствующий результат.

В качестве дополнительной информации приведены различные способы выполнения команды в Perl.

system(): если вы хотите выполнить команду и не заинтересованы в чтении вывода консоли выполненной команды.

exec : когда вы не хотите возвращаться к вызывающему скрипту Perl. использовать то же самое.

обратные кавычки: когда вы хотите сохранить/прочитать консольный вывод команды в переменную Perl. Первоначально я ошибочно подумал, что вместо этого необходимо использовать Single cores ('') для обратных кавычек (``) и запутаться, потому что это почти похоже на Single cores (''), пожалуйста, обратите внимание.

open() : когда вы хотите передать команду (в качестве ввода или вывода) в свой скрипт.

Надеюсь, это может быть полезно для вас..... :)

BR, Джерри Джеймс

person HateStackOverFlow    schedule 29.09.2017