![](/img/trans.png)
[英]Capturing output, error and exit code with Perl IPC::Open3 fails in newer Perl
[英]capturing shell exit code in perl
我正在使用open 3的perl执行shell命令
local ( *HANDLE_IN, *HANDLE_OUT, *HANDLE_ERR );
my $pid = open3( *HANDLE_IN, *HANDLE_OUT, *HANDLE_ERR, @cmd_args );
其中@cmd_args =我的shell命令
我的外壳返回以下退出代码
0: command executed successfully
>0: error in executing the command
如何在Perl中从Shell捕获退出代码?
这很简单,只需查看旧的perldoc :
$pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR,
'some cmd and args', 'optarg', ...);
my($wtr, $rdr, $err);
use Symbol 'gensym'; $err = gensym;
$pid = open3($wtr, $rdr, $err,
'some cmd and args', 'optarg', ...);
waitpid( $pid, 0 );
my $child_exit_status = $? >> 8;
$child_exit_status
然后包含已执行程序的状态。
另一种使用的方法是${^CHILD_ERROR_NATIVE}
,我特别在通过反引号执行外部命令时使用:
my $fancyresult = `ls -lsahR /`;
if (${^CHILD_ERROR_NATIVE} != 0) {
...
您最终需要使用wait
或waitpid
来收获孩子。 当您这样做时, $?
将设置如下。
waitpid($pid, 0);
die "Can't waitpid: $!" if $? < 0;
die "Child killed by signal ".( $? & 0x7F ) if $? & 0x7F;
die "Child returned error ".( $? >> 8 ) if $? >> 8;
print "Child ran successfully!\n"; # if $? == 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.