每隔x秒运行一次功能的最佳方法然后杀死并重复?

时间:2016-11-16 09:36:22

标签: python subprocess

说我想做

import subprocess
subprocess.call(["foo"])

我的问题是,我怎么能每x秒运行subprocess.call([“foo”]),然后杀死进程,然后重复x秒?

3 个答案:

答案 0 :(得分:1)

要每x秒运行一次命令,您可以使用无限循环和time

import os
import signal
import subprocess
import time

cmd = "python -m SimpleHTTPServer"

while True: 
    server = subprocess.Popen(cmd , stdout=subprocess.PIPE, shell=True,
                       preexec_fn=os.setsid)

    time.sleep(10)
    os.killpg(os.getpgid(server.pid), signal.SIGTERM)
    time.sleep(5)

如果您不知道如何停止该过程,我建议您查看https://stackoverflow.com/a/4791612/2588566

如果您只想让进程运行x时间睡眠,请使用for循环。

我不知道你想要运行什么命令。在这个例子中,你运行一个python服务器来提供当前目录中的文件。它启动进程,让它保持运行10秒,然后终止进程并等待5秒(所以你可以检查它是否已经停止)。所以你有一台服务器运行10秒,每次执行之间的间隔为5秒。

答案 1 :(得分:0)

subprocess.call在流程foo完成之前不会返回。

  

运行args描述的命令。等待命令完成,然后返回returncode属性。

改为使用Popen

import subprocess
import time

while True:
    # The process will take 10 seconds to finish, but ...
    p = subprocess.Popen(["sleep", "10"])

    # ... we kill it after 5 seconds.
    time.sleep(5)
    p.kill()

答案 2 :(得分:0)

有一个指令系统可以完成。代码不需要设置循环,从main函数开始,执行输出和rest,然后重启进程

import time
import sys 
import os

def restart_program():
    python = sys.executable
    os.execl(python, python, * sys.argv)

if __name__ == "__main__":
    print 'start...'
    print "sleep 3s..."
    time.sleep(3)
    restart_program()
相关问题