LINUX.ORG.RU

Ja-ja, das ist fantastisch!

sdio ★★★★★
()

Писать нужно в соответствующую ссылку в /proc/${PID}/fd

anonymous
()
Ответ на: комментарий от dilmah

Вообщем, дело такое... Есть скрипт на питоне, который при запуске переходит в консольный режим, в котором пользователь может вводить команды. Я хочу написать отдельный демон который через net-сокеты будет получать соотв.команды извне (с другой машины в сети), запускать этот python-скрипт, передавать ему полученные команды и заставлять его их отрабатывать. Почему просто не переписать сам скрипт? Просто геморно очень :)

anonymous
()
Ответ на: комментарий от anonymous

"консольный" режим бывает разный. Большинство программ и скриптов просто читают stdin и пишут в stdout -- поэтому с ними легко можно общаться в шелл-скрипте.

А есть "тяжелые" случаи когда программа использует специфику терминала и с пайпами не работает.

У тебя первый или второй случай?

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>Я хочу написать отдельный демон который через net-сокеты будет получать соотв.команды извне
используй netcat

dimon555 ★★★★★
()
Ответ на: комментарий от dilmah

Dilmah, у меня, видимо, первый случай, т.к. с другой консоли я нормально передаю команды в консоль программы. Получилось вот так: #echo 'help' > /proc/6748/fd/1 и в консоли программы отображается этот ввод: =>help

Осталось придумать как заставить консоль кушать команду..:) Но это уже наверно вопрос к питон-коду проги..

anonymous
()
Ответ на: комментарий от anonymous

> Осталось придумать как заставить консоль кушать команду..:)

ну вот пример с таким скриптом:

$ cat script.sh
#!/bin/sh

awk '{ print ($1+$2); fflush() }'

Если его запустить то он ждет ввода двух чисел в строке, и выдает их
сумму, и ждет следующую строку до бесконечности (или пока ctrl-D не
нажмут).


Как ему давать команды автоматически и получать ответы?  Например так:

$ cat manager.sh
#!/bin/sh

mkfifo fifo_one
mkfifo fifo_two
./script.sh < fifo_one > fifo_two &
exec > fifo_one < fifo_two
echo 5 12
read ANSWER
echo HEHE, got answer $ANSWER 1>&2
echo 99 20
read ANSWER
echo got another answer $ANSWER 1>&2
rm -f fifo_one fifo_two
exit 0

$ sh manager.sh
HEHE, got answer 17
got another answer 119

Проблема только в том что происходит буферизация вывода, и ответ
программы может быть не сразу прочитан.  В данном случае с этим
борется fflush() в awk.  В твоем случае питоновский скрипт все-таки
придется редактировать, чтобы обеспечить что он флашит свой вывод.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Dilmah! Спасибо что сразу не бьешь Advanced bash-scripting guide по башке, а нормально объясняешь! ;) Поигрался со скриптом, хоть наконец разобрался как пайпы работают.

По поводу редактирования .py скрипта - это черный песец. :/ Там используютя модули confConsole и optparse, который разбирает уже _введенные_ пользователем с консоли команды. править модули - без вариантов ;/

anonymous
()

посмотри в сторону expect. Это вроде специальная тулза для работы с интерактивными консольными интерфейсами

Vinick ★★
()
Ответ на: комментарий от Vinick

уже пробовал. Сие не подходит (

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.