perl – 简单的open3示例不起作用
发布时间:2020-12-15 21:45:29 所属栏目:大数据 来源:网络整理
导读:我正在尝试制作一个主perl脚本,调用子perl脚本并通过管道进行交互. 我为master写了这段代码: #!/usr/bin/env perluse strict;use warnings;use IPC::Open3;my @children;for my $i ( 0 .. 4 ) { print "Master: " . $i . ",I summon youn"; $children[$i]
我正在尝试制作一个主perl脚本,调用子perl脚本并通过管道进行交互.
我为master写了这段代码: #!/usr/bin/env perl use strict; use warnings; use IPC::Open3; my @children; for my $i ( 0 .. 4 ) { print "Master: " . $i . ",I summon youn"; $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 crownn"; for my $i ( 0 .. 4 ) { $children[$i]->{'_STDIN'}->write("fetch the sacred crownn"); 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 ; } 而这一个给孩子: #!/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 awakenn" ; while(<STDIN>) { print STDOUT $id . ': Master ask me to ' . $_ ; if ($_ =~ /exit/oi) { exit 0 ; } } 但是当我启动大师时,他只是在阅读孩子的回答时挂了. 关于我做错了什么,为什么? 解决方法
你是
suffering from buffering.
在子进程开头附近说$| = 1允许子进程打印而不等待输出缓冲区填满. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |