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