为什么Perl中的system()结果不是我脚本的确切退出代码?

时间:2016-08-19 15:14:02

标签: perl

我有以下perl脚本(test.pl):

my $exit_code = system('./test.py');
print $exit_code."\n";

试图从python可执行文件(test.py)中捕获退出代码:

#!/bin/env python
import sys
sys.exit(2)

直接运行python可执行文件返回2,这是我的预期:

> ./test.py
> echo $?
2

但是,运行perl会返回不同的内容:

> perl test.pl
512

为什么perl会从python中捕获不同的退出代码?

2 个答案:

答案 0 :(得分:8)

孩子可能甚至没有打电话给exit。因此,system的返回值(又名$?)包含的信息多于exit参数。

if    ( $? == -1  ) { die "Can't launch child: $!\n"; }
elsif ( $? & 0x7F ) { die "Child killed by signal ".( $? & 0x7F )."\n"; }
elsif ( $? >> 8   ) { die "Child exited with error ".( $? >> 8 )."\n"; }
else                { print "Child executed successfully\n"; }

这是documented

答案 1 :(得分:5)

The documentation“要获得实际的退出值,请向右移动8”