Как избежать печати в STDOUT при использовании Perl `IPC :: System :: Simple: runx`? - PullRequest
2 голосов
/ 17 сентября 2010

Я использую IPC::System::Simple:runx для выполнения системных команд и смерти при неожиданных возвращаемых значениях. Проблема в том, что вывод команд выводится на оболочку.

  1. Как мне избежать печати этого выход
  2. Как мне избежать распечатки этого вывода но получить его в переменную perl?

UPDATE

3) Как я могу напечатать эти выходные данные, если выполнение не удается?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Команда capture () ?Или capturex ().

Цитируется по ссылке:

Обработка исключений

В случае, если команда возвращает неожиданный статус, выполняется и захватвызовет исключение, которое, если оно не будет обнаружено, прервет вашу программу с ошибкой.

Захватить исключение очень просто:

eval {
    run("cat *.txt");
};

if ($@) {
    print "Something went wrong - $@\n";
}

Подробнее см. в разделе диагностики ниже.

0 голосов
/ 17 сентября 2010

Если модуль ведет себя очень плохо и печатает напрямую в STDOUT, вы всегда можете перенаправить STDOUT в другое место.Этот вид взлома, но некоторые модули требуют его.

# Save STDOUT for restore later
open(OLD_STDOUT, ">>&STDOUT");
open(STDOUT, ">/some/file/or/dev/null");
# call your module
# Restore STDOUT
open(STDOUT, ">>&OLD_STDOUT");
...