我有以下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中捕获不同的退出代码?
答案 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”。