将Java标准输出流到perl标准输出
我正在从perl运行java应用程序 这是剧本将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
#!/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很有用