我有python代码:
import subprocess
subprocess.call(['sh', './zenity.sh'])
和 zenity.sh 文件
#!/usr/bin/python
zenity --forms --title="Question" \
--add-entry="Question" \
运行它就会打开一个窗口,其中有一个字段可以输入一些文本。
我想在这个 zenity 窗口内输入一些文本,例如使用 xdotool 我尝试使用
subprocess.call(["xdotool", "type", "some text"])
不工作
然后我创建了另一个 .sh
#!/bin/bash
xdotool search --class zenity windowfocus type 'some text'
也无法工作
有任何想法吗?
答案1
使用以下命令更改zenity.sh
文件:
#!/usr/bin/python
zenity --forms --title="Question" \
--add-entry="Question" \
到:
#!/bin/bash
zenity --forms --title="Question" \
--add-entry="Question" \
您不是zenity
在 python 脚本中调用的。您是从 bash/shell 命令调用的,因此您的 shebang(第一行)一定#!/bin/bash
不是#!/usr/bin/python
。
答案2
xdotool
要使用您的示例,有两个要求:
- 你应该跑步X11并不是韦兰。
- 在运行该命令之前,您创建的窗口
zenity
必须完全加载。xdotool
为了正确执行此操作,您需要:
在窗口中加载背景(与
&
)如下:zenity --forms --title="Question" --add-entry="Question" &
给窗口一些时间以完全加载(使用
sleep
),如下所示:sleep 1
通过名称获取窗口 ID,如下所示:
window="$(xdotool search --name 'Question')"
通过 ID 激活你的窗口(存储在
$window
上面的第 3 步中),如下所示:xdotool windowactivate "$window"
在窗口中输入如下文本:
xdotool type 'some text'
最终的脚本将会是这样的:
#!/bin/bash
zenity --forms --title="Question" --add-entry="Question" &
sleep 1
window="$(xdotool search --name 'Question')"
xdotool windowactivate "$window"
xdotool type 'some text'