每y秒运行x秒的Python子进程

2 投票
2 回答
2544 浏览
提问于 2025-04-16 23:03

我想在Python里面控制一个bash程序。我想每隔x秒运行一个外部命令,持续y秒,然后在y秒后把它杀掉。我在处理线程、休眠和等待等方面遇到了一些麻烦,所以想请人给个简单的例子。

比如,在命令行里使用可能是这样的:

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

这意味着foo.py会每60秒运行一次某个东西,持续10秒(不是说60秒之间的间隔)。如果时间有一秒或几分之一秒的偏差也没关系。我可以通过创建一个阻塞的进程来做到这一点,然后做一些数学运算来设置定时器,但我觉得用线程可能会有更优雅的方法。

2 个回答

0

你可以试试Python的apscheduler模块。它的功能类似于cron风格的调度,也就是可以定时执行任务。想了解更多,可以看看这个链接:http://packages.python.org/APScheduler/

6

这有帮助吗?

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()

撰写回答