我正在尝试在Windows上的Perl脚本中打开多个进程。程序结构看起来像这样......
my($chld1_out, $chld1_in);
my($chld2_out, $chld2_in);
my($chld3_out, $chld3_in);
my @cmds1=();
my @cmds2=();
my @cmds3=();
$pid1 = open2($chld1_out, $chld1_in, 'ex1.exe')or die $!;
$pid2 = open2($chld2_out, $chld2_in, 'ex2.pl')or die $!;
$pid3 = open2($chld3_out, $chld3_in, 'ex3.exe')or die $!;
print $chld1_in $cmds1[0];
print $chld2_in $cmds2[0];
$op1=<$chld1_out>;
$op2=<$chld2_out>;
if ( $op1 == 'done' && $op1 != 'done')
print $chld1_in $cmds1[0];
elsif ( $op1 != 'done' && $op1 == 'done')
print $chld2_in $cmds2[0];
elsif ( $op1 == 'done' && $op1 == 'done')
print $chld1_in $cmds1[1];
print $chld2_in $cmds2[1];
.....
.....
for loops and while loops..... to process with the data output... and do conditional programming.
close $pid1 or die $!;
close $pid2 or die $!;
close $pid3 or die $!;
如果是,我该如何执行Perl脚本(ex2.pl) 我知道的一种方式是 system($ ^ X,“ex2.pl”,“arg”);
我很感激你的帮助这个尽快...
谢谢,
-Abishek
答案 0 :(得分:3)
可能不是,“打开”阅读过程通常是幕后的分支和管道。而fork-execs在Windows *上不起作用。
要执行 Perl 脚本,只需do
即可。
do 'ex2.pl';
如果你想传递args:
{ local @ARGV = qw<One Two Three>;
do 'ex2.pl';
}
当ex2.pl
想要访问@ARGV
时,它将是( 'One', 'Two', 'Three' )
。当然,如果你想做任何perl速记ARGV
技巧,最好本地化GLOB。
{ local *ARGV = [ qw<One Two Three> ]; ... }
* - 我一直认为使用具有可读stdout和stderr的Windows进程结构以及可写stdin可能应该 。