擅长:python、mysql、java
<p>每次<code>alarm()</code>调用自身时,都会使用多一点的堆栈空间,最终会耗尽,因为供应不是无限的。在</p>
<p>相反,您需要的是一个沿着以下路线的循环:</p>
<pre><code>def alarm():
while True:
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')
else:
print"Checked"
time.sleep(5)
</code></pre>
<p>但您应该记住,结束该程序的唯一方法是关闭它(例如使用<kbd>CTRL-C</kbd>或<code>kill</code>)。也许值得重新考虑一下,这样你就可以以更干净的方式关闭它。在</p>