Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout другой программы? по образу и подобию того, как делает сквид со своими редиректорами...
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...
Может так?
open(PROGRAM_NEW, "| prog_name");
print PROGRAM_NEW "то что надо передать";
close (PROGRAM_NEW);
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...
Может так?
open(PROGRAM_NEW, "| prog_name");
print PROGRAM_NEW "то что надо передать";
close (PROGRAM_NEW);
>>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>>другой программы? по образу и подобию того, как делает сквид со
>>своими редиректорами...
>Может так?
>open(PROGRAM_NEW, "| prog_name");
>print PROGRAM_NEW "то что надо передать";
>close (PROGRAM_NEW);
я не совсем это имел ввиду...
я хочу сделать так - некая прога,которая запущена моей прогой на Перле, в цикле крутится и ждет ввода строки на stdin, переваривает и выдает результат на stdout, потом опять возвращается к ожиданию ввода...
т.е. она стартует только один раз, а строк переваривает много!
т.е. задач фактически несколько:
1) запустить прогу и прицепиться к ее stdin и stdout
2) послать ей строку - много раз
3) забрать у нее строку - тоже много раз
4) убить прогу - надеюсь и сам сумею :)хотя бы подскажите функции, которые смотреть...
для этого подчиненная программа должна предусматривать такое. типа как на перле:
while (<>){
# цикл обработки ввода
}
а если не так то надо будет в цикле открывать и закрывать ....
>для этого подчиненная программа должна предусматривать такое. типа как на перле:
>while (<>){
># цикл обработки ввода
>}
>а если не так то надо будет в цикле открывать и закрывать
>....это все уже есть и отлажено...
осталось как-то прикрутить это...
Для надежности можно седлать цикл:while (<STDIN>) {
...
};Если скрипту были переданы какие-нибудь параметры в командной строке, то в операции "ромб" (<>) они буду восприниматься, как файлы из которых читать строки.
>Для надежности можно седлать цикл:
>
>while (<STDIN>) {
> ...
>};
>
>Если скрипту были переданы какие-нибудь параметры в командной строке, то в операции "ромб" (<>) они буду восприниматься, как файлы из которых читать строки.это все сделано и работает!
мне надо написать внешнюю, вызывающую программу!
т.е. вопрос не принять из stdin и послать на stdout, а _послать_ на _чужой_ stdin и _принять_ с _чужого_ stdout !
Незнаю, как средствами perl сделать поток входа и выхода на внешнюю программу одновременно, но можно использовать стандартную схему C/C++. То есть, делается 2 pipe-а для получения READHANDLE и WRITEHANDLE. Далее делается fork и в потомке перенаправляются потоки примерно так:open(STDOUT, ">&WRITEHANDLE1");
open(STDIN, ">&READHANDLE2");а в родителе работаешь с READHANDLE1 и WRITEHANDLE2 для чтения (из STDOUT программы) и записи (в STDIN программы) соответственно. После этих манипуляций в потомке говоришь:
exec "чего_запускать" массив_аргументов
и получаешь то, что хочешь... теоретически :)
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...perldoc IPC::Open2