无法读取 IPC::Open3 child 的输出
Unable to read IPC::Open3 child's output
这段代码是用来通过管道进行读写的,但是好像不太好用
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 中的输出的第一行。不进入 while 循环。虽然执行命令有很多输出。
你打错了。
$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.
这段代码是用来通过管道进行读写的,但是好像不太好用
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 中的输出的第一行。不进入 while 循环。虽然执行命令有很多输出。
你打错了。
$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.