无法读取IPC :: Open3子级的输出

时间:2015-01-27 07:27:19

标签: perl pipe

此代码用于读取和写入管道,但似乎效果不佳。

use strict;
use IPC::Open2;


my $st1="String1\n";
my $st2="String2\n";
my $st3="String3\n";
my $st4="String4\n";
my $st5="String5\n";

my $joint=$st1.$st2.$st3.$st4.$st5;
my $r;
my $pid = open2(\*CHILD_IN, \*CHILD_OUT, 'java -Dfile.encoding=UTF8 -cp abc.jar:xxx.jar TestCode')
or die "open2() failed $!";
print CHILD_IN $joint;
$r=<CHILD_OUT>;
print "Got $r from child\n";
print "[OUTPUT]: $_" while (<CHILD_OUT>);

此代码仅读取存储在$ r中的输出的第一行。循环时不进入内部。虽然通过执行命令有很多输出。

1 个答案:

答案 0 :(得分:1)

你有一个错字。

$r=<CHLD_OUT>;

print "[OUTPUT]: $_" while (<CHILD_OUT>);

CHLD_OUT CHILD_OUT

总是使用

可能更好
use warnings

通过显示警告信息,它可以帮助您避免麻烦:

readline() on unopened filehandle CHILD_OUT at x.pl line 19.