Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 5, 2015 19:38:26

Maeshae3
Зарегистрирован: 2015-11-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Послать нажатие клавиши процессу.

doza_and
Может быть полезен модуль pexpect.
Уважаемый, Вы меня модулем pexpect очень заинтересовали. Не знал что он так функционален.
Каюсь в том что сразу не разобрался. У меня получилось запустить свою программу при помощи
pexpect.spawn.interact()
В терминале нормальный интерактивный режим. Скажите, в таком режиме можно послать команду?

P.S. Запускаю именно так чтобы с клавиатуры можно было управлять.

Отредактировано Maeshae3 (Ноя. 5, 2015 19:51:01)

Офлайн

#2 Ноя. 5, 2015 20:01:29

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Послать нажатие клавиши процессу.

JOHN_16
Если я правильно понял ТС, то нужно именно эумуляция нажатия клавиш клавиатуры,
Да для этого входной поток не пойдет. Я думаю что в этом случае проще найти аналог который имеет нормальный интерфейс для внешнего управления.
В моей практике не было ни одной программы под lunix которая требовала для управления extended keycodes. :).
Народ вроде использовал xdotool. Под винду мы пару раз применяли pywinauto для программ у которых был только GUI интерфейс. Впечатление исключительно негативное. Работы много а толку мало.

Надо посмотреть доку по эмулятору, может в нем предусмотрен способ внешнего управления.



Офлайн

#3 Ноя. 5, 2015 21:01:44

Maeshae3
Зарегистрирован: 2015-11-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Послать нажатие клавиши процессу.

doza_and
Народ вроде использовал xdotool
Я уже просмотрел возможные эмуляторы клавиатуры, xdotool, xvkbd, xte - xautomation и
pyatspi. Ничего не подходит Поэтому и решил внимательней посмотреть pexpect.
Возможно ли в режиме interact() хоть что нибудь послать? Если да то может я найду способ
при котором программа воспримет ascii. А в ascii я уже что угодно переведу.

Есть ещё надежда найти модуль который работает с /dev/pts. Если два этих метода не прокатят
то буду искать нечто совсем другое

Офлайн

#4 Ноя. 5, 2015 22:51:23

Maeshae3
Зарегистрирован: 2015-11-04
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Послать нажатие клавиши процессу.

Нет, ascii не воспринимает, надо дальше думать.

Офлайн

#5 Ноя. 6, 2015 00:01:13

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Послать нажатие клавиши процессу.

Я вот хотел предложить, но потом передумал, из за отсутствия необходимых знаний, но все же скажу.
Если у запускаемой программы есть какой то терминал, который бы был в /dev/ptsX, то можно было бы подумать над тем что бы писать в него последовательности, которые терминал бы воспринимал как команду. Например если ввести в баше:

printf "123\nqwe\033[2A\n"
то 123 затерется. Если есть некоторая последовательность символов которая воспринимается терминалом как вам необходимо, то достаточно выполнить
printf "sequency" > /dev/pts/1
В питоне можно либо через subprocess, либо напосредственно открыть файл и писать туда



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version