Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Php, работа с консольной программой. Постепенный ввод в нее параметров 
:(
    Опции темы
cccr85
Дата 16.12.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.7.2010

Репутация: нет
Всего: 2



Вобщем суть в следующем. 

Есть консольная программа, она требует ввода параметров постепенно. Причем нужно точно знать что она пишет в ответ.

Ты скажешь это просто, юзай proc_open. Ок. Я его и юзаю. Но только проблема в том, что когда я читаю то что выдала прога, чтение зависает...
Код

<?php
$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "w")
);
$process = proc_open('console.exe', $descriptorspec, $pipes);

if (is_resource($process)) {
    stream_set_blocking($pipes[1], FALSE);
    $out = '';
    while (!feof($pipes[1])) {
       $out .= fgets($pipes[1], 1024);
   }
   echo $out;
}


На строчке $out .= fgets($pipes[1], 1024); скрипт зависает намертво, а почему? Потому что прога отдает свой вывод, и дальше ждет ввода, а мы пытаемся читать из нее... 

Я отправился на php.net и там прочитал в одном из последних вариантов, как человек так работал с клиентом eDonkey. Так вот, он по 2 символа читал отдачу, и в случае когда получал "> " прекращал цикл. 

Мне к сожелению это не подходит, так как прога иногда в выводе возращает обращение к самой себе. Получается что в выводе встретитсья 2 раза "> " и вот как быть, я не знаю....


Есть ли какой нибудь timeout для fgetss? Или как решить проблему?
PM MAIL   Вверх
Pfailed
Дата 19.12.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: нет
Всего: 39



stream_set_timeout() ?

Добавлено через 3 минуты и 17 секунд
Кстати, зачем вы делаете чтение из потока неблокируемым?


--------------------
PM MAIL   Вверх
cccr85
Дата 19.12.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.7.2010

Репутация: нет
Всего: 2



stream_set_timeout()

в винде это не работает :(

Добавлено через 1 минуту и 24 секунды
Кстати, зачем вы делаете чтение из потока не блокируемым?

Я игрался с параметрами, пробовал так и сяк. В общем этот артефакт остался от попыток. Без него тоже не работает, это косяк винды.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.