如何在Python中延迟脚本的执行?

时间:2017-03-28 19:26:48

标签: python linux bash

我正在使用Python脚本,我在延迟执行Bash脚本方面遇到了一些问题。

我的script.py允许用户选择script.sh,并且在修改该脚本之后,用户可以使用各种选项运行它。

其中一个选项是延迟N秒执行脚本的可能性,我使用time.sleep(N)但是script.py完全停止N秒,我只想延迟N的script.sh秒,让用户继续使用script.py。

我搜索的答案没有成功,有什么想法吗?

3 个答案:

答案 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 - 但是如果你想让它在后台运行,你会想要自己把它放在一个线程(或者这样)中。