【发布时间】:2012-03-13 10:07:16
【问题描述】:
例如,如果我想使用类似的东西:
xdotool mousemove 945 132
xdotool click 1
为了将鼠标移动到某个位置并点击。在 ubuntu 中,我可以直接在终端中输入这些命令以获得所需的效果,但我想将它们放在 Python 脚本中。
【问题讨论】:
-
还有一些其他的库,例如github.com/cphyc/pyxdotool(但是这个使用子进程)
例如,如果我想使用类似的东西:
xdotool mousemove 945 132
xdotool click 1
为了将鼠标移动到某个位置并点击。在 ubuntu 中,我可以直接在终端中输入这些命令以获得所需的效果,但我想将它们放在 Python 脚本中。
【问题讨论】:
import subprocess
subprocess.call(["xdotool", "mousemove", "945", "132"])
等等。请参阅subprocess 文档。
【讨论】:
截至 2015 年,您还可以使用这个 python 包: https://github.com/rshk/python-libxdo
【讨论】:
import xdo; x=xdo.xdo() 并使用 x.<Tab> 检查自动完成,它们只是不存在。查看单元测试,作者的主要目标似乎是鼠标移动。已经实现的东西是错误的:x.send_keysequence_window("A") 有效,但 x.send_keysequence_window("Alt+Tab") 无效(尽管它识别组合,因为例如“Alt,Tab”给出错误)。 delay=x 参数被识别但什么都不做。
python-libxdo-ng,它修复了一些错误。这个解决方案可以比subprocess快100倍
我已经将 xdotool 与 sh 和 os.system 一起使用了一段时间,但我决定更新所有内容以使用子进程。这样做我遇到了一些小故障,并在谷歌搜索中发现了the libxdo python module suggested by Simon。 Python3 有一个小问题——它使用字节串——但是转换很简单,而且它比旧的两步过程运行得更顺畅、更可靠。
这里有一个小代码可能会有所帮助(显然哈希爆炸需要匹配您的 python 路径)。这两个函数包括转换为 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')
【讨论】:
from xdo import Xdo 现在出现错误,似乎应该是import xdo; x = xdo.xdo()(最好不要使用“from ... import”,因此如果需要,您可以使用xdo.CURRENTWINDOW)
sudo python3 -m pip install --upgrade python-libxdo,这可能会为您提供当前版本。我使用 MITx 6.00.1x 和 .2x,所以我的机器上往往有很多 Python。基本上编译,altinstall 然后使用 pip 来获取最新的兼容模块版本。我很想知道 pip 是否会给你当前版本@Luc,如果你愿意让我知道的话。
python3-$name 与 pip3 中名为 $name 的软件包相同,但似乎 libxdo 在存储库中不可用。这是存储库中的内容:salsa.debian.org/python-team/modules/python-xdo 这解释了为什么我有 0.4,而您要求我尝试“升级”到最新版本,就像您一样,0.1:P