我在shell脚本中运行程序。我怎么知道它是否已加载? (Linux)的

时间:2017-04-09 21:41:53

标签: python linux shell xdotool

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

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

我真的不喜欢我等待10秒的解决方案,以便加载程序。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这实际上取决于。如果program.py应该完成,那么请转到xdotool,然后您可能希望使用&&而不是&。单个&表示您希望执行该命令,然后尽快转到下一个命令,而无需等待它完成。 dobule &&表示您要等待执行完成,然后只有在出现零错误时才继续。如果您想要运行下一个命令而不管&的成功与否,您也可以删除;或使用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都在同一时间运行。如果这就是你要找的东西。