1

我有一个 perl 脚本,其中我正在分叉一个子进程。这是我正在做的事情:

my $pid = fork;

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

现在,我想捕获 X.pl 的错误以显示在我的脚本中。但据我了解,这是不可能起诉 exec 的。

我还有哪些其他选择?

在我的情况下如何使用 open3?

谢谢!

4

1 回答 1

0

如果您要查找的只是 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

于 2013-10-16T10:09:54.220 回答