我system用来调用外部应用程序,我需要解释它的退出代码.
我知道system返回命令的退出代码乘以256,但在foo.bat我写入时exit 256结果为零.
为什么会这样?
Windows使用32位退出代码,因此exit 256完全有效.
>cmd /c exit 256
>echo %ERRORLEVEL%
256
Run Code Online (Sandbox Code Playgroud)
但是,Perl仅保留最低有效8位.
>perl -e"system 'exit 256'; CORE::say $?>>8"
0
>perl -e"system 'exit 266'; CORE::say $?>>8"
10
Run Code Online (Sandbox Code Playgroud)
这是一个Perl缺陷,没有充分的理由.如果使用Win32 :: Process代替system,则可以获得正确的退出代码.
>perl -MWin32::Process=NORMAL_PRIORITY_CLASS,INFINITE -e"Win32::Process::Create(my $proc, $ENV{COMSPEC}, 'cmd /c exit 256', 0, NORMAL_PRIORITY_CLASS, '.') or die $^E; $proc->Wait(INFINITE); $proc->GetExitCode(my $exit_code); CORE::say $exit_code;"
256
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |