树莓派脚本调度问题:如何限时循环运行两个带循环的Python脚本
解决树莓派脚本循环启停的问题
我明白你的痛点——直接用execfile会让目标脚本的循环霸占当前进程,根本没法按时终止。咱们得换个思路,把Final.py和A.py作为独立的子进程启动,这样就能精准控制它们的运行时长了。
下面是修改后的p.py代码,完美实现你的需求:
import subprocess import time while True: # 启动Final.py作为独立进程 final_proc = subprocess.Popen(["python3", "Final.py"]) # 让它运行5秒 time.sleep(5) # 终止进程(如果terminate不够狠,可以换成final_proc.kill()) final_proc.terminate() # 等待进程彻底结束,避免僵尸进程 final_proc.wait() # 启动A.py作为独立进程 a_proc = subprocess.Popen(["python3", "A.py"]) # 让它运行25秒 time.sleep(25) # 终止进程 a_proc.terminate() a_proc.wait()
关键知识点说明:
- 为什么不用
execfile?:execfile会把目标脚本的代码直接加载到当前p.py的进程中执行,一旦Final.py里有无限循环,p.py的后续代码(比如time.sleep(5))根本没机会运行,自然没法终止它。用subprocess.Popen则会创建一个全新的进程,两者互不阻塞。 terminate()vskill():terminate()会给子进程发送终止信号,让它有机会清理资源后退出;如果目标脚本完全不理会这个信号,再用kill()强制杀死进程。- Python版本注意:如果你的树莓派默认用Python2,把
python3改成python就行。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

