Perl fork процесс с использованием open3

У меня есть Perl-скрипт, в котором я разветвляю дочерний процесс. Вот что я делаю:

my $pid = fork;

if($pid) {
# parent 
waitpid($pid, 0);
}
else {
exec("some other script X.pl");
}

Теперь я хотел зафиксировать ошибку X.pl для отображения в моем скрипте. Но, как я понимаю, это невозможно подать в суд на исполнительного директора.

Какие у меня есть другие варианты?

Как я могу использовать open3 в моем случае?

Спасибо!

1 ответ

Если то, что вы ищете, это просто возвращаемое значение X.pl, вы можете использовать

my $returnValue = $?>>8;

См. И http://perldoc.perl.org/functions/system.html для получения дополнительной информации. Кстати, если все, что ваш родитель делает, это ждет ребенка, то использование system, вероятно, лучше, чем fork и exec вручную.

редактировать:

Для захвата STDOUT вы можете использовать

my $output = qx/X.pl/;

вместо разветвления и исполнения. Это все еще позволит вам проверить $? для возвращаемых значений. Чтобы Perl не интерполировал содержимое команды, которую вы можете использовать, также используйте qx'command' передать команду в Систему, ничего не меняя. Если вы хотите, чтобы ваш родитель делал что-то во время ожидания X.pl, но все еще хотите возвращаемое значение и вывод X.pl, я бы посоветовал посмотреть на ожидаемый результат. http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod

Другие вопросы по тегам