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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к внешнему процессу I/O stream? 
:(
    Опции темы
snake12
Дата 21.5.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На сервере под линуксом работает приложение с консолью.
Вводишь в консоль свои команды и они исполняются программой.
Я пишу удалённое управление через веб терминал.
Тоесть нужно на php передавать консоли некие данные.
Чем и как это делать?
* Процесс (программа) уже запущен/а.
PM MAIL   Вверх
bobik02
Дата 21.5.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Несовсем понял сути вопроса smile 

Код

...
exec("/usr/local/sbin/SuperProgram $Parametr1 $Parametr2 $ParametrN");
...




--------------------
Have a nice day
PM   Вверх
skyboy
Дата 22.5.2008, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(snake12 @  21.5.2008,  21:08 Найти цитируемый пост)
Процесс (программа) уже запущен/а. 

а в случае прямого доступа к системе с запущенной программой как передаются данные? через сигналы/семафоры? посредством ввода через клавиатуру? посредством редактирования определенного файла?
PM MAIL   Вверх
snake12
Дата 22.5.2008, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вводишь в консоль свои команды c клавиатуры и они исполняются программой.
PM MAIL   Вверх
A1ekcandr
Дата 22.5.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тогда вариант c exec должен подойти
PM MAIL   Вверх
snake12
Дата 22.5.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



подскажите пожалуйста как именно это сотворить?
Программа уже запущена и запускать по новой её не надо,
нужно эмулировать ввод данных в консоль Консоль как на примере cmd.exe
PM MAIL   Вверх
skyboy
Дата 22.5.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(snake12 @  22.5.2008,  10:12 Найти цитируемый пост)
нужно эмулировать ввод данных в консоль Консоль как на примере cmd.exe

запусти cmd. смени активное окно на другое, скажем, открой "Мой компьютер". Теперь попробуй ввести что-нибудь в неактивное окно cmd.exe. Вот такая у тебя ситуация.
Возможных вариантов три:
1. переделать программу так, чтоб она принимала данные не через консоль(через сокеты или через файл)
2. запускать программу каждый раз, когда тебе от неё чего-то надо(чем тебя, кстати, такой вариант не устраивает?)
3. воспользоваться механизмами ОС для эмуляции ввода. Под windows, к примеру, можно было бы воспользоваться оконным сообщение WM_KEYDOWN(вроде, не перепутал). Под *nix что надо использовать - не знаю. Да и программа должна быть сделана так, чтоб обрабатывать передаваемые сигналы. В любом случае, если у тебя *nix, то обратись в раздел по *nix системам(PHP умеет работать с сообщениями и Bourne shell; есть набор функционала только под windows). возможно, я слишком усложнил. всяко, сам не использовал такое, так что просто указываю направление куда стоит покопать.
в любом случае, лучше первые два метода.

PM MAIL   Вверх
snake12
Дата 22.5.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На данный момент у меня работает так

php -> middleprogram -> cmd.exe
Где middle program на c++ отсылает консоли информацию через pipe и directinput
и её php каждый раз запускает по новой.
( фокус на окне + ввод или DI без фокуса )

Меня так не устраивает и отсюда два варианта.
1. Добавить в middle функционал за который отвечает php
2. Добавить в php скрипт задачи выполняемые middle program

Что выполняет middle program я вроде объяснил.
"Записывает" в cmd.exe то что мне надо.

Я думал использовать php dio_open но его убрали из php 5 а я его пока не установил,
но похоже из документации что он тоже запускает копию cmd.

Только в любом случае я не имею понятия как получить id внешенго процесса.
PM MAIL   Вверх
bobik02
Дата 22.5.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



skyboy отлично все объяснил  smile 

От себя добавлю: Была у меня похожая ситуация, решил перенаправлять stdout (I/O) в файл. И таким образом прога(демон) "общалась" через файл...


--------------------
Have a nice day
PM   Вверх
skyboy
Дата 22.5.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(snake12 @  22.5.2008,  11:38 Найти цитируемый пост)
Только в любом случае я не имею понятия как получить id внешенго процесса.

если можешь изменять свою программу, то(говорю про windows, раз уж ведем речь про cmd.exe) добавь обработку в программе какого-то редкого(WM_USER + <достаточно большое число>) сообщения. а в РНР рассылай не конкретному окну. или же используй возможность вызова функций dll/exe из-под РНР. тогда тебе этот консольный ввод набок не важен будет.

Добавлено через 1 минуту и 32 секунды
впрочем, я без понятия, имеют ли отношения сообщения, описанные в мануале по РНР, к оконным вообщениям Windows. если нет - опять же, обращаться к dll, в которой лежит send_message.
PM MAIL   Вверх
snake12
Дата 22.5.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сообщения в php помоему это и есть виндоусовские сообщения
там используется winapi на сколько я понял.

Дело не в этом, и редактировать исходники cmd.exe я не могу.


1. переделать программу так, чтоб она принимала данные не через консоль(через сокеты или через файл)
2. запускать программу каждый раз, когда тебе от неё чего-то надо(чем тебя, кстати, такой вариант не устраивает?)
3. воспользоваться механизмами ОС для эмуляции ввода. Под windows, к примеру, можно было бы воспользоваться


1. Не могу. Программа не моя
2. Это игровой сервер естесвенно запускать и останавливать нельзя
3. Там unix . Как там дальше - я знаю.

После хмм.. общении на 5 форумах получается что либо никто не знает как это реализовать
либо это просто невозможно, в чём я сомневаюсь..

PM MAIL   Вверх
skyboy
Дата 22.5.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(snake12 @  22.5.2008,  16:21 Найти цитируемый пост)
Это игровой сервер естесвенно запускать и останавливать нельзя

игровой сервер реально крут, если принимает ввод данных только непосредственно из stdin
Цитата(snake12 @  22.5.2008,  16:21 Найти цитируемый пост)
общении на 5 форумах получается что либо никто не знает как это реализовать

а как под *nix можно эмулировать ввод?может, тебе надо в раздел по *nix системам, а не в PHP вопрос задавать?
PM MAIL   Вверх
snake12
Дата 23.5.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



управляющие команды из stdin как остановка и т.п
PM MAIL   Вверх
jsse
Дата 23.5.2008, 15:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 1.5.2006
Где: Кривой Рог

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



Это действительно вопрос больше к юникс разделу.
Запускай в линукс программу через эмулятор терминала - screen

Код

screen -R myterm

там запускай свою программу

а из php
Код

 exec("screen -S myterm -X stuff $command");


И ввод будет идти на терминал myterm



Это сообщение отредактировал(а) jsse - 23.5.2008, 15:46
PM WWW Skype   Вверх
snake12
Дата 24.5.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тоесть по ходу вы мне предлогаете тоже самое что у меня и так есть
php -> middleprogram -> cmd.exe
только middleprogram заменить на screen

Получается работать с другими (уже запущенными) приложениями из php не получается ?
Хотя чувствую ответ гдето близко.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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