2012-03-13 27 views
2

たとえば、:Pythonモジュール/スクリプト内からxdotoolを使用するにはどうしたらいいですか?私はのようなものを使用したい場合

は945 132

が特定の場所にマウスを移動し、クリックするために1

をクリックしxdotool MOUSEMOVE xdotool。 ubuntuでは、これらのコマンドをターミナルに直接入力するだけで、目的の効果を得ることができますが、それらをPythonスクリプトの中に入れたいと思います。前もって感謝します!

答えて

8
import subprocess 

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

などsubprocessのドキュメントを参照してください。

+0

AWESOME !!どうもありがとう! :D – coffeeNcode

0

私はしばらくの間、SHとos.systemでxdotool使っていたのが、サブプロセスを使用するために、すべてを更新することにしました。私はいくつかの小さな不具合に遭遇し、グーグルでthe libxdo python module suggested by Simonが見つかりました。 Python3には小さな問題がありました。バイトストリングを使用しますが、変換は簡単で、古い2ステッププロセスよりもスムーズかつ確実に実行されます。

ここには、(ハッシュ・バングがあなたのpythonパスと一致する必要があることは明らかです)少しのコードがあります。 2つの関数は、Python 3のためのバイトコード(ascii)への変換を含みます。したがって、.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') 
関連する問題