【问题标题】:stream Java STDOUT to perl STDOUT将 Java STDOUT 流式传输到 perl STDOUT
【发布时间】:2016-11-11 14:12:00
【问题描述】:

我正在从 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`;

如果在外部运行命令,Java 应用程序会在控制台[STDOUT] 中写入调试信息,但当我从 perl 调用时,它会缓冲调试消息并仅在 Java 应用程序完成时打印。

从 perl 调用时如何流式传输调试消息?

我禁用了控制台缓冲区$| = 1,但还是一样

【问题讨论】:

    标签: 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 很有用。

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      相关资源
      最近更新 更多