我编写了一个运行python程序的shell脚本。然后我想使用xdotool将文件加载到程序中。现在这是我的代码:
#!/bin/bash
cd ~/Folder
python program.py &
sleep 10
WID=$(xdotool search --onlyvisible program)
....
我真的不喜欢我等待10秒的解决方案,以便加载程序。还有更好的方法吗?
答案 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.py
和xdotool
都在同一时间运行。如果这就是你要找的东西。