【发布时间】:2023-04-02 22:37:01
【问题描述】:
我编写了一个程序,它每 5 秒检查一次日志文件中的特定词。 当它找到那个词时,它会发出一些噪音并覆盖日志文件。 问题是在我得到某个点之后:
RuntimeError:调用 Python 对象时超出了最大递归深度。
有没有更好的方法来制作这个循环?
import time
import subprocess
global playalarm
def alarm():
if "No answer" in open("/var/log/hostmonitor.log").read():
print "Alarm!"
playalarm=subprocess.Popen(['omxplayer','/root/Alarm/alarm.mp3'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=True)
log = open("/var/log/hostmonitor.log","w")
log.write("Checked")
log.close()
time.sleep(5)
playalarm.stdin.write('q')
alarm()
else:
print"Checked"
time.sleep(5)
alarm()
alarm()
【问题讨论】:
-
你所认为的函数的“本地范围”存储在一个数据结构中,当进入一个方法时它被压入堆栈,当方法退出时它被弹出。由于您无限调用警报函数,而没有完成任何调用,因此您超过了最大堆栈深度(这是有限的),并看到此错误。简单的解决方法是使用循环而不是递归。
标签: python function infinite-loop