Передача аргументов через канал во внешнюю команду с системой один за другим - PullRequest
1 голос
/ 27 октября 2010

Я пытаюсь открыть внешнюю команду из Perl, используя системный вызов. Я работаю на Windows. Как я могу передавать аргументы один за другим?

Например:

system("ex1.exe","arg1",arg2",....); 

Здесь ex1.exe - внешняя команда, и я хотел бы, чтобы она сначала обработала arg1, а затем arg2 и так далее ...

Буду признателен за ваш ответ,

Ответы [ 2 ]

7 голосов
/ 27 октября 2010

Используйте трубу, открытую :

use strict; 
use warnings;

{
    local ++$|;

    open my $EX1_PIPE, '|-', 'ex1.exe' 
        or die $!;

    print $EX1_PIPE "$_\n"
        for qw/arg1 arg2 arg3/;

    close $EX1_PIPE or die $!;
}

Я предполагаю, что вы хотите передать данные в ex1.exe STDIN; например, если ex1.exe - это следующий Perl-скрипт:

print while <>;

Тогда, если вы запустите приведенный выше код, вы получите:

arg1
arg2
arg3
1 голос
/ 27 октября 2010

Вы пытаетесь выполнить ex1.exe один раз для каждого аргумента? Нечто похожее на:

> ex1.exe arg1
> ex1.exe arg2
> ex1.exe arg3

Если это так, вы бы сделали:

for my $arg (@args)
{
   system( 'ex1.exe', $arg);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...