Будет ли эта Perl-программа работать на Windows? - PullRequest
0 голосов
/ 28 октября 2010

Я пытаюсь открыть несколько процессов в скрипте Perl в Windows.Структура программы будет выглядеть примерно так ...

 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

1 Ответ

3 голосов
/ 28 октября 2010

Вероятно, нет, "открытие" процесса для чтения - это, как правило, вилка и труба за кулисами. И вилки-execs не работают в Windows *.

Для выполнения сценария Perl просто do it.

do 'ex2.pl';

А если вы хотите передать аргументы:

{   local @ARGV = qw<One Two Three>;
    do 'ex2.pl';
}

Когда ex2.pl хочет получить доступ к @ARGV, это будет ( 'One', 'Two', 'Three' ). Конечно, если вы хотите выполнить какой-либо из трюков Perl ARGV, лучше локализовать GLOB.

{ local *ARGV = [ qw<One Two Three> ]; ... }

* - Я долго думал, что подходящий обходной путь должен быть возможным с использованием структур процессов Windows, которые имеют читаемый stdout и stderr, а также записываемый stdin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...