myb.py的Perl:打開/關閉捕獲返回代碼
import time
import sys
stime = time.time()
run_until = 600
cnt = 0
while True:
dur = time.time() - stime
if dur > run_until:
break
cnt += 1
print cnt
time.sleep(1)
if cnt == 10:
sys.exit(2) <---- capture 2
mya.pl
use FileHandle;
my $myexe = 'myb.py';
my $FH = FileHandle->new;
open $FH, q{-|},
"$myexe 2>&1"
or print "Cannot open\n";
process_output($FH);
close $FH or warn $!;
sub process_output {
my ($fh) = @_;
while (my $line = <$fh>) {
chomp $line;
print "$line\n";
}
}
OUTPUT:
1
2
3
4
5
6
7
8
9
10
Warning: something's wrong at ./mya.pl line 10.
如果我行更改爲:
my $err = close $FH;
它給我一個空白的$ err。
問題:如何從mya.pl中的myb.py中捕獲返回代碼2?
http://perldoc.perl.org/functions/close.html指出'close'返回'false'。它不一定是'0'。我想,一個空白*在perl中是''false''。 – rubikonx9 2015-02-24 15:27:19
@ g.tsh是的,我得到了那部分。但我想專門捕捉'2'。不是真的或假的。這是不適合打開/關閉組合? – ealeon 2015-02-24 15:28:54
我已經使用capture_exec:http://search.cpan.org/~dagolden/IO-CaptureOutput-1.1103/lib/IO/CaptureOutput.pm來獲取stdout和退出代碼。我不知道如何用簡單的'open'來實現這一點。 – rubikonx9 2015-02-24 15:35:10