gpt4 book ai didi

perl - 简单的 open3 示例不起作用

转载 作者:行者123 更新时间:2023-12-04 20:16:43 25 4
gpt4 key购买 nike

我正在尝试制作一个主 perl 脚本,调用子 perl 脚本并通过管道进行交互。

我已经为主人写了这段代码:

#!/usr/bin/env perl

use strict;
use warnings;

use IPC::Open3;

my @children;

for my $i ( 0 .. 4 ) {
print "Master: " . $i . ", I summon you\n";

$children[$i] = {};

$children[$i]->{'pid'} = open3( my $CH_IN, my $CH_OUT, my $CH_ERR, 'perl child.pl -i ' . $i );

$children[$i]->{'_STDIN'} = $CH_IN;
$children[$i]->{'_STDOUT'} = $CH_OUT;
$children[$i]->{'_STDERR'} = $CH_ERR;

my $line = readline $children[$i]->{'_STDOUT'};
print $line ;

}

print "Master: Go fetch me the sacred crown\n";

for my $i ( 0 .. 4 ) {
$children[$i]->{'_STDIN'}->write("fetch the sacred crown\n");
my $line = readline $children[$i]->{'_STDIN'};
print $line ;
}

print "Master: Thanks. Now die!!!\n";

for my $i ( 0 .. 4 ) {
$children[$i]->{'_STDIN'}->write("die !!\n");
my $line = readline $children[$i]->{'_STDIN'};
print $line ;
}

这是给 child 的:
#!/usr/bin/env perl

use Getopt::Long ;

my $cmdline_id ;

GetOptions ('i=s' => \$cmdline_id) ;

my $id = $cmdline_id ;

exit 1 if !defined $id ;

print "I am $id, and I am awaken\n" ;

while(<STDIN>) {
print STDOUT $id . ': Master ask me to ' . $_ ;

if ($_ =~ /exit/oi) {
exit 0 ;
}
}

但是当我启动 Master 时,他只是在阅读 child 的回应时挂了。

知道我做错了什么,为什么?

最佳答案

您是 suffering from buffering .

$|=1在子进程的开始附近,允许子进程在不等待输出缓冲区填满的情况下进行打印。

关于perl - 简单的 open3 示例不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com