2016-11-11 107 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有用的,如果你想要做的输出数据的非阻塞读取了。