вывод команды направлен на экран - PullRequest
2 голосов
/ 17 июля 2011

начинающий программист на Perl!Я использую функцию system (), чтобы получить код возврата для внешней программы (в данном случае - php), однако вывод команды по-прежнему выводится на экран.
Как мне предотвратить это?Мой код:

use strict; use warnings;
print 'Return code:', system('php -l wrong.php'), "\n";

Этот код выводит код возврата, но также выводит вывод выполненной команды.

Любая помощь будет принята!

РЕДАКТИРОВАТЬ: дальнейшее тестирование показало, что это происходит только при использовании команды php lint .. использование ее с другими командами ничего не печатает ...

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

То, что вы хотите, это IPC :: Open3 :

    use IPC::Open3;
    use Symbol qw(gensym);

    my $err = gensym; #work around IPC::Open3's interface
    my $pid = open3 my $wtr, my $rdr, $err,
            'some cmd', 'arg1', 'arg2', ...;

Разделение stdin на $wtr, stdout на $rdr и stderr на $err Это такжедает вам максимальный контроль над связью с процессом

2 голосов
/ 17 июля 2011

Если вы работаете в UNIX-подобной ОС, вы сможете перенаправить вывод в команде:

Попробуйте: system('php -l wrong.php >> /dev/null'), чтобы избавиться от того, что отправляется на стандартный вывод.

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

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