如何从python模块/脚本中使用xdotool?

如何从python模块/脚本中使用xdotool?,python,ubuntu,Python,Ubuntu,例如,如果我想使用以下内容: xdotool mousemove 945 132 xdotool单击1 要将鼠标移动到某个位置并单击。在ubuntu中,我可以直接在终端中键入这些命令以获得所需的效果,但我想将它们放在Python脚本中。提前谢谢 import subprocess subprocess.call(["xdotool", "mousemove", "945", "132"]) 请参阅文档。从2015年起,您还可以使用此python包: 我已经在sh和os.system中使用xd

例如,如果我想使用以下内容:

xdotool mousemove 945 132

xdotool单击1

要将鼠标移动到某个位置并单击。在ubuntu中,我可以直接在终端中键入这些命令以获得所需的效果,但我想将它们放在Python脚本中。提前谢谢

import subprocess

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

请参阅文档。

从2015年起,您还可以使用此python包:

我已经在sh和os.system中使用xdool有一段时间了,但决定更新所有内容以使用子流程。这样做,我遇到了一些小故障,并在谷歌发现。Python3有一个小问题——它使用ByTestRing——但是转换很简单,并且比旧的两步流程运行得更平稳、更可靠

这里有一些代码可能会有所帮助(显然,散列爆炸需要与python路径匹配)。这两个函数包括Python3到ByTestRing(ascii)的转换,因此Python2可以不使用.encode()

#!/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')

这似乎非常有限。在源代码中,我看到了keydown和keyup的绑定,但是执行
importxdo;在ipython3中的x=xdo.xdo()
,并使用
x检查自动完成。
它们不在那里。看看单元测试,作者的主要目标似乎是鼠标移动。已经实现的东西是错误的:
x.send\u keysequence\u window(“A”)
工作,但是
x.send\u keysequence\u window(“Alt+Tab”)
不工作(尽管它能识别组合,因为例如“Alt,Tab”给出了一个错误)。
delay=x
参数已被识别,但不起任何作用。
from xdo import xdo
现在给出了一个错误,似乎这应该是
import xdo;x=xdo.xdo()
(最好不要使用“from…import”,这样您就可以根据需要使用
xdo.CURRENTWINDOW
),在使用Python 3.8.2rc2和Python libxdo 0.1.2a1的Linux中,上述语法仍然没有错误。所以我不确定你面临的问题发生在哪里。尽管如此,请随时根据您的情况调整我的示例。我使用的是Debian存储库中的python3 xdo版本0.4-1。我想这就是区别。听起来不错。尝试卸载它,然后使用
sudopython3-mpipinstall——升级pythonlibxdo
,这可能会为您提供当前版本。我使用MITx 6.00.1x和.2x,所以我的机器上有很多蟒蛇。基本上是编译、altinstall,然后使用pip获得最新的兼容模块版本。我很想知道pip是否会给你当前版本的@Luc,如果你能告诉我的话。嗯,等等,我们使用的是完全不同的软件包。通常,Debian存储库中的
python3-$name
与pip3中名为
$name
的包是相同的,但似乎
libxdo
在存储库中不可用。这就是存储库中的内容:这解释了为什么我有0.4,而你让我尝试“升级”到最新版本,就像你有0.1:P一样