我正在使用Python脚本,我在延迟执行Bash脚本方面遇到了一些问题。
我的script.py允许用户选择script.sh,并且在修改该脚本之后,用户可以使用各种选项运行它。
其中一个选项是延迟N秒执行脚本的可能性,我使用time.sleep(N)
但是script.py完全停止N秒,我只想延迟N的script.sh秒,让用户继续使用script.py。
我搜索的答案没有成功,有什么想法吗?
答案 0 :(得分:2)
您可以在新线程中启动脚本,在运行之前休眠。
最小例子:
import subprocess as sp
from threading import Thread
import time
def start_delayed(args, delay):
time.sleep(delay)
sp.run(args)
t = Thread(target=start_delayed, kwargs={'args': ['ls'], 'delay': 5})
t.start()
答案 1 :(得分:0)
在调用script.sh之前,您应该使用 subprocess.Popen 运行sleep。
答案 2 :(得分:0)
考虑使用threading
module中的Timer
对象:
import subprocess, threading
t = threading.Timer(10.0, subprocess.call, args=(['script.sh'],))
t.start()
......以上在延迟10秒后运行script.sh
。
或者,如果您希望只用一个线程来控制它们,就能有效地运行任意数量的计划任务,请考虑使用tandard-library sched
module中的scheduler
:
import sched, subprocess
s = sched.scheduler(time.time, time.sleep)
s.enter(10, subprocess.call, (['script.sh'],))
s.run()
这将在10秒后运行script.sh
- 但是如果你想让它在后台运行,你会想要自己把它放在一个线程(或者这样)中。