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

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

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

Есть ещё надежда найти модуль который работает с /dev/pts. Если два этих метода не прокатят
то буду искать нечто совсем другое
Maeshae3
Нет, ascii не воспринимает, надо дальше думать.
JOHN_16
Я вот хотел предложить, но потом передумал, из за отсутствия необходимых знаний, но все же скажу.
Если у запускаемой программы есть какой то терминал, который бы был в /dev/ptsX, то можно было бы подумать над тем что бы писать в него последовательности, которые терминал бы воспринимал как команду. Например если ввести в баше:
printf "123\nqwe\033[2A\n"
то 123 затерется. Если есть некоторая последовательность символов которая воспринимается терминалом как вам необходимо, то достаточно выполнить
printf "sequency" > /dev/pts/1
В питоне можно либо через subprocess, либо напосредственно открыть файл и писать туда
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB