Как я могу подавить вывод системы при использовании nohup из Perl? - PullRequest
6 голосов
/ 03 октября 2010

В Perl я запускаю процесс с помощью команды nohup.Команда ниже:

system("nohup myproc pe88 &");

Это работает нормально, и процесс запускается, как и ожидалось.Однако я хотел бы подавить следующий вывод этой команды, а именно:

Sending output to nohup.out

У меня должен быть этот процесс, перенаправляющий весь его вывод в nohup.out, но я просто не хочу, чтобы он отображался, когдазапустить мою программу на PerlВместо этого я хочу напечатать мое собственное удобное сообщение.Я перепробовал несколько вариантов, но у меня пока ничего не получилось.

Ответы [ 2 ]

5 голосов
/ 03 октября 2010

Как насчет:

system("nohup myproc pe88 >nohup.out 2>&1 &");

Справочная страница nohup гласит:

Если стандартный вывод является терминалом, добавить вывод в 'nohup.out', если возможно, $ HOME / nohup.out в противном случае. Если стандартная ошибка является терминалом, перенаправить его на стандартный вывод. к сохранить вывод в файл, используйте `nohup КОМАНДА> ФАЙЛ '.

Так что, если вы явно перенаправите STDOUT и STDERR в nohup.out, то nohup не печатает это сообщение. Конечно, вы не получите автоматический откат к $ HOME / nohup.out, если nohup.out недоступен для записи, но вы можете сначала проверить это, если это проблема.

Обратите внимание, что если вы перенаправляете только STDOUT, nohup печатает сообщение "перенаправление stderr в stdout".

4 голосов
/ 03 октября 2010

"Sending output to nohup.out" сообщение отправляется на STDERR , поэтому вы можете перехватить STDERR обычными способами

  • либо через оболочку: system("nohup myproc pe88 2> /tmp/error_log.txt &");

    Используйте /dev/null вместо /tmp/error_log.txt, если вам вообще не нужен stderr;и добавьте «> /tmp/myout.txt» для перенаправления stdout.

  • Или путем захвата через Perl (не используйте вызов system(), вместо этого используйте IPC::Open3 или captureкоманда от IPC :: System :: Simple )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...