Как я могу использовать xdotool из модуля / скрипта Python? - PullRequest
5 голосов
/ 13 марта 2012

Например, если я хочу использовать что-то вроде:

xdotool mousemove 945 132

xdotool click 1

Для того, чтобы переместить мышь в определенное место и нажать. В Ubuntu я могу просто ввести эти команды прямо в терминал, чтобы получить желаемый эффект, но я бы хотел поместить их в скрипт Python. Заранее спасибо!

Ответы [ 3 ]

11 голосов
/ 13 марта 2012
import subprocess

subprocess.call(["xdotool", "mousemove", "945", "132"])

и т.д.. См. subprocess документы.

5 голосов
/ 17 июня 2017

С 2015 года вы также можете использовать этот пакет Python: https://github.com/rshk/python-libxdo

3 голосов
/ 22 ноября 2017

Я некоторое время использовал xdotool с sh и os.system, но решил обновить все, чтобы использовать подпроцесс. При этом я столкнулся с несколькими незначительными сбоями и, обнаружив в Google, модуль python libxdo, предложенный Саймоном . Была небольшая проблема с Python3 - он использует строки байтов - но преобразование было простым, и оно работает более плавно и надежно, чем старый двухэтапный процесс.

Вот небольшой код, который может помочь (очевидно, хэш-взрыв должен соответствовать вашему пути в Python). Эти две функции включают преобразование в bytestrings (ascii) для Python 3, поэтому .encode () может быть отключено для Python 2.

#!/home/john/anaconda3/bin/python3.6
import sys
from xdo import Xdo
from time import sleep

def sendkeys(*keys):
    for k in keys: xdo.send_keysequence_window(0, k.encode())

def type(text):
    xdo.enter_text_window(0, text.encode())

sleep(0.5)
xdo = Xdo()

# this updates a row in a spreadsheet with copies from prior row
# first check that this is the intended spreadsheet
if 'Trades' in xdo.get_window_name(xdo.get_active_window()).decode():
    with open('my_data_file_name', 'r') as f:
        trade = (f.readlines()[-int(sys.argv[1])])[:-1]
        t = [s if s else '0' for s in trade.split('\t')]
        type('\t'.join(t[:7]))
        sendkeys('Tab', 'Up', 'ctrl+c', 'Down', 'ctrl+v', 'Right')
        type(' ' + t[-3])
        sendkeys('Tab')
        type(t[-2])
        sendkeys('Tab')
        type(t[-1])
        sendkeys('Tab', 'Up', 'ctrl+c', 'Down', 'ctrl+v', 'Right')
        type('333')
        sendkeys('Tab')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...