Запускать подпроцесс python по x секунд каждые y секунд - PullRequest
2 голосов
/ 07 августа 2011

Я бы хотел управлять программой bash из Python. Я хотел бы запускать внешнюю команду каждые x секунд в течение y секунд, а затем уничтожать ее через y секунд. У меня проблемы с темами, сном, ожиданием и т. Д., И мне интересно, может кто-нибудь опубликовать простой пример.

Например, из CLI использование может быть

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

означает, что foo.py будет запускать что-то в течение 10 секунд каждые 60 секунд (не 60 секунд между). Если он выключен на секунду или доли секунды, то все в порядке. Я могу сделать это, вызывая процесс, который блокирует, а затем выполняет некоторые математические операции для установки таймера, но я думаю, что может быть более элегантный способ с потоками.

Ответы [ 2 ]

6 голосов
/ 07 августа 2011

это помогает?

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 голосов
/ 14 ноября 2011

Вы можете попробовать модуль apscheduler в python. Это похоже на планирование в стиле cron.http://packages.python.org/APScheduler/

...