0

我编写了一个运行 python 程序的 shell 脚本。然后我想使用 xdotool 将文件加载到程序中。现在这是我的代码:

#!/bin/bash
cd ~/Folder
python program.py &
sleep 10
WID=$(xdotool search --onlyvisible program)
....

我真的不喜欢只等待 10 秒以加载程序的解决方案。有没有更好的办法?

4

1 回答 1

0

这真的取决于。如果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.pyxdotool两者都同时运行。如果这就是你要找的。

于 2017-04-09T22:09:34.927 回答