将Java标准输出流到perl标准输出

将Java标准输出流到perl标准输出,java,perl,Java,Perl,我正在从perl运行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

我正在从perl运行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`;
如果在bash之外运行命令,Java应用程序会在控制台[STDOUT]中写入调试信息,但当我从perl调用时,它会缓冲调试消息并仅在Java应用程序完成时打印

当从perl调用时,如何流化调试消息


我取消了控制台缓冲区$|=1,但再次将其作为文件句柄打开,并以常规方式读取

#!/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很有用

将其作为文件句柄打开,并以常规方式读取

#!/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很有用