我编写了一个运行 python 程序的 shell 脚本。然后我想使用 xdotool 将文件加载到程序中。现在这是我的代码:
#!/bin/bash
cd ~/Folder
python program.py &
sleep 10
WID=$(xdotool search --onlyvisible program)
....
我真的不喜欢只等待 10 秒以加载程序的解决方案。有没有更好的办法?
这真的取决于。如果program.py
应该完成然后继续,xdotool
那么您可能想要使用&&
而不是&
. 单&
表示您希望命令执行,然后尽快转到下一个命令,而无需等待它完成。dobule&&
意味着您要等待执行完成,然后仅在您有零错误退出时才继续。如果您想运行下一个命令而不管' 是否成功,您也可以删除&
or 使用。这就是我的意思:;
program.py
#!/bin/bash
cd ~/Folder
python program.py &&
WID=$(xdotool search --onlyvisible program)
...
如果program.py
在您运行xdotool
命令时应该继续运行,但program.py
在继续之前您需要进入一些就绪状态,那么您在使用中是正确的&
,但是您需要以program.py
某种方式监视它,并从中获得一个信号,它是好的接着说。这样做的一种古老方法是简单地让program.py
创建/触摸/编辑文件,当检测到该文件时,您继续。更高级的方法是使用网络套接字或类似方法,但如果您真的不需要做任何花哨的事情,我建议您不要这样做。无论如何,如果你program.py
创建一个信号文件,比如说/tmp/.program_signalfile
,当一切准备就绪时,你所要做的就是:
#!/bin/bash
cd ~/Folder
python program.py &
until [ -f /tmp/.program_signal_file ]
do
sleep 1
done
WID=$(xdotool search --onlyvisible program)
rm /tmp/.program_signal_file
...
在最后一个解决方案中program.py
,xdotool
两者都同时运行。如果这就是你要找的。