The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как передавать данные на stdin другой программы?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как передавать данные на stdin другой программы?"
Сообщение от Michael emailИскать по авторуВ закладки on 02-Апр-03, 10:31  (MSK)
Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout другой программы? по образу и подобию того, как делает сквид со своими редиректорами...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как передавать данные на stdin другой программы?"
Сообщение от konst emailИскать по авторуВ закладки on 02-Апр-03, 12:19  (MSK)
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...
Может так?
open(PROGRAM_NEW, "| prog_name");
print PROGRAM_NEW "то что надо передать";
close (PROGRAM_NEW);

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как передавать данные на stdin другой программы?"
Сообщение от konst emailИскать по авторуВ закладки on 02-Апр-03, 12:20  (MSK)
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...
Может так?
open(PROGRAM_NEW, "| prog_name");
print PROGRAM_NEW "то что надо передать";
close (PROGRAM_NEW);

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как передавать данные на stdin другой программы?"
Сообщение от Michael emailИскать по авторуВ закладки on 02-Апр-03, 12:50  (MSK)
>>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>>другой программы? по образу и подобию того, как делает сквид со
>>своими редиректорами...
>Может так?
>open(PROGRAM_NEW, "| prog_name");
>print PROGRAM_NEW "то что надо передать";
>close (PROGRAM_NEW);
я не совсем это имел ввиду...
я хочу сделать так - некая прога,которая запущена моей прогой на Перле, в цикле крутится и ждет ввода строки на stdin, переваривает и выдает результат на stdout, потом опять возвращается к ожиданию ввода...
т.е. она стартует только один раз, а строк переваривает много!
т.е. задач фактически несколько:
1) запустить прогу и прицепиться к ее stdin и stdout
2) послать ей строку - много раз
3) забрать у нее строку - тоже много раз
4) убить прогу - надеюсь и сам сумею :)

хотя бы подскажите функции, которые смотреть...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как передавать данные на stdin другой программы?"
Сообщение от k8 emailИскать по авторуВ закладки on 02-Апр-03, 13:18  (MSK)
для этого подчиненная программа должна предусматривать такое. типа как на перле:
while (<>){
# цикл обработки ввода
}
а если не так то надо будет в цикле открывать и закрывать ....
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как передавать данные на stdin другой программы?"
Сообщение от Michael emailИскать по авторуВ закладки on 02-Апр-03, 15:11  (MSK)
>для этого подчиненная программа должна предусматривать такое. типа как на перле:
>while (<>){
># цикл обработки ввода
>}
>а если не так то надо будет в цикле открывать и закрывать
>....

это все уже есть и отлажено...
осталось как-то прикрутить это...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как передавать данные на stdin другой программы?"
Сообщение от XMan emailИскать по авторуВ закладки on 02-Апр-03, 16:30  (MSK)
Для надежности можно седлать цикл:

while (<STDIN>) {
...
};

Если скрипту были переданы какие-нибудь параметры в командной строке, то в операции "ромб" (<>) они буду восприниматься, как файлы из которых читать строки.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как передавать данные на stdin другой программы?"
Сообщение от Michael emailИскать по авторуВ закладки on 02-Апр-03, 19:06  (MSK)
>Для надежности можно седлать цикл:
>
>while (<STDIN>) {
> ...
>};
>
>Если скрипту были переданы какие-нибудь параметры в командной строке, то в операции "ромб" (<>) они буду восприниматься, как файлы из которых читать строки.

это все сделано и работает!
мне надо написать внешнюю, вызывающую программу!
т.е. вопрос не принять из stdin и послать на stdout, а _послать_ на _чужой_ stdin и _принять_ с _чужого_ stdout !

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Как передавать данные на stdin другой программы?"
Сообщение от XMan emailИскать по авторуВ закладки on 02-Апр-03, 21:04  (MSK)
Незнаю, как средствами perl сделать поток входа и выхода на внешнюю программу одновременно, но можно использовать стандартную схему C/C++. То есть, делается 2 pipe-а для получения READHANDLE и WRITEHANDLE. Далее делается fork и в потомке перенаправляются потоки примерно так:

open(STDOUT, ">&WRITEHANDLE1");
open(STDIN, ">&READHANDLE2");

а в родителе работаешь с READHANDLE1 и WRITEHANDLE2 для чтения (из STDOUT программы) и записи (в STDIN программы) соответственно. После этих манипуляций в потомке говоришь:

exec "чего_запускать" массив_аргументов

и получаешь то, что хочешь... теоретически :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Как передавать данные на stdin другой программы?"
Сообщение от pth Искать по авторуВ закладки on 03-Апр-03, 00:12  (MSK)
>Подскажите, плиз, как в Перле передать данные на stdin и прочитать stdout
>другой программы? по образу и подобию того, как делает сквид со
>своими редиректорами...

perldoc IPC::Open2

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру