我正在使用Python腳本,並且在延遲Bash腳本執行時遇到了一些問題。如何在Python中延遲執行腳本?
我的script.py讓用戶選擇一個script.sh,並且在修改該腳本之後,用戶可以使用各種選項運行它。
其中一個選項是延遲N秒執行腳本的可能性,我使用time.sleep(N)
但script.py完全停止N秒,我只是想延遲N秒的script.sh,讓用戶繼續使用script.py。
我搜索的答案沒有成功,有什麼想法?
我正在使用Python腳本,並且在延遲Bash腳本執行時遇到了一些問題。如何在Python中延遲執行腳本?
我的script.py讓用戶選擇一個script.sh,並且在修改該腳本之後,用戶可以使用各種選項運行它。
其中一個選項是延遲N秒執行腳本的可能性,我使用time.sleep(N)
但script.py完全停止N秒,我只是想延遲N秒的script.sh,讓用戶繼續使用script.py。
我搜索的答案沒有成功,有什麼想法?
您可以在新線程中啓動腳本,在運行之前進行休眠。
小例子:
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()
這與'threading.Timer'在標準庫中已經提供的有什麼不同? –
(順便說一句,你在一個地方有'so',在另一個地方有'sp'')。 –
謝謝,它完美的作品! – mao95
在調用script.sh之前,您應該使用subprocess.Popen運行睡眠。
你爲什麼要這麼做?它比使用'time.sleep()'要高得多。 –
......據我瞭解,OP對'time.sleep()'的論點是它綁定了它們的Python腳本的執行流程,但是阻塞在一個子流程上將會執行同樣的事情。 –
考慮使用Timer
對象從threading
module:
import subprocess, threading
t = threading.Timer(10.0, subprocess.call, args=(['script.sh'],))
t.start()
... 10秒延遲後上述運行script.sh
。
或者,如果你想有效地能夠控制它們運行的計劃任務的任意數,只有一個線程,可以考慮使用scheduler
從TANDARD庫sched
module:
import sched, subprocess
s = sched.scheduler(time.time, time.sleep)
s.enter(10, subprocess.call, (['script.sh'],))
s.run()
這將在經過10秒鐘後運行script.sh
- 儘管如果您希望它在後臺運行,您可能希望自己將其放入一個線程(或多個)中。
我想你想*叉*不同的工藝,睡在這個過程中,然後* EXEC *的bash腳本 –
如果你使用'subprocess'模塊,並創建自己的'Popen'對象,你的'bash'腳本不會被阻塞,你可以在'sleep'命令的開頭。 – kindall
[Celery](http://www.celeryproject.org/)是一個可用於在Python中調度任務(任意函數調用)的框架。 –