我有一个 perl 脚本,其中我正在分叉一个子进程。这是我正在做的事情:
my $pid = fork;
if($pid) {
# parent
waitpid($pid, 0);
}
else {
exec("some other script X.pl");
}
现在,我想捕获 X.pl 的错误以显示在我的脚本中。但据我了解,这是不可能起诉 exec 的。
我还有哪些其他选择?
在我的情况下如何使用 open3?
谢谢!
如果您要查找的只是 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