J'utilisais xdotool avec sh et os.system pendant un certain temps, mais a décidé de mettre à jour tout d'utiliser le sous-processus. Ce faisant, j'ai rencontré quelques problèmes mineurs et dans googling découvert the libxdo python module suggested by Simon. Il y avait un petit problème avec Python3 - il utilise des chaînes d'octets - mais la conversion était simple et il fonctionne plus facilement et de façon fiable que l'ancien processus en deux étapes.
Voici un petit code qui peut vous aider (il est évident que le hash bang doit correspondre à votre chemin python). Les deux fonctions incluent la conversion en bytestrings (ascii) pour Python 3 donc .encode() pourrait être laissé pour 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')
AWESOME !! Merci beaucoup! :RÉ – coffeeNcode