说我想做
import subprocess
subprocess.call(["foo"])
我的问题是,我怎么能每x秒运行subprocess.call([“foo”]),然后杀死进程,然后重复x秒?
答案 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()