2016-11-11 102 views
1

我運行在Perl流的Java標準輸出到perl STDOUT

這裏Java應用程序的腳本

#!/usr/bin/perl 
use strict; 
use warnings; 

$| = 1; 

my $args = join (" " , @ARGV); 

my $command = "/usr/java/jdk6/bin/java -jar runner-0.0.1-SNAPSHOT.jar $args"; 
print "Executing $command\n"; 
print "Please wait...\n"; 

print `$command`; 
如果運行命令

的Java應用程序寫入調試信息控制檯[STDOUT]外即慶典,但是當我從perl中調用它時,它會緩存調試消息並僅在Java應用程序完成時纔打印。

如何從Perl調用時調試調試消息?

我disbaled控制檯緩衝區$| = 1但再次同

回答

5

打開它作爲一個文件句柄,並從中讀出通常的方式。

#!/usr/bin/env perl 
use strict; 
use warnings; 

$| = 1; 

my $command = "/usr/java/jdk6/bin/java -jar runner-0.0.1-SNAPSHOT.jar @ARGV"; 
open (my $java_output, '|-', $command); 

while (my $line = <$java_output>) { 
    print $line; 
} 
close ($java_output); 

您可能會發現IO::Select有用的,如果你想要做的輸出數據的非阻塞讀取了。