2011-08-07 50 views
2

我想在Python中控制bash程序。我想每隔x秒運行一次外部命令y秒,然後在y秒後殺掉它。我在線程,睡眠和等待等方面遇到了一些麻煩,並且想知道是否有人可以發佈一個簡單的例子。每y秒運行python子進程x秒

例如,從CLI的使用可能是

./foo.py --runfor=10 --runevery=60 

意思foo.py會爲每60秒(不之間60秒)10秒運行的東西。如果它關閉了一秒鐘或幾分之一秒即可。我可以通過產生一個阻塞的進程來做到這一點,然後做一些數學來設置計時器,但我認爲線程可能會更優雅。

+1

嘗試詢問具體問題。 _what_的一個例子?線程?產卵過程?定時? – agf

回答

5

對此有幫助嗎?

import threading 
import subprocess 
import time 

class IntervalRunner(threading.Thread): 
    def __init__(self, seconds): 
     self.seconds = seconds 
     threading.Thread.__init__(self) 

    def run(self): 
     while True: 
      p = subprocess.Popen('ls -la'.split(), shell=False, 
           stdout=subprocess.PIPE, 
           stderr=subprocess.PIPE) 

      stdout, stderr = p.communicate() 
      print stdout 
      time.sleep(self.seconds) 

runner = IntervalRunner(10) 
runner.start() 
runner.join() 
+0

這麼好的代碼。 – BrainStorm

+0

它有點幫助。我澄清了這個問題。我沒有看到你的代碼在'y'秒後如何殺死p進程。 – mankoff

+0

我會像'while self.running:'那樣做循環。 –