gpt4 book ai didi

python - Raspi Python脚本不断崩溃

转载 作者:行者123 更新时间:2023-12-03 17:11:01 25 4
gpt4 key购买 nike

我拥有一台连接树莓的3d打印机。为了远程控制打印机(例如通过中继来关闭和关闭打印机),我制作了一个小的python脚本。

控制它的一种可能性是使用似乎可以正常工作的Telegram Bot(电茶壶)。
打开和关闭打印机的另一种方法是硬件开关。出于安全考虑,我只希望在按住开关3秒钟后关闭打印机。

问题是,脚本有时会崩溃(大多数情况是在长时间运行之后)。
我以为最后是我的while循环,但是我真的不明白为什么它只有在经过一段可变的时间后崩溃,以及如何改善它。
到目前为止的代码是:

#!/usr/bin/python
import time
import subprocess
import os
import datetime
import telepot
import urllib
import RPi.GPIO as GPIO

chat_id_auth = XXXXXXXXXXX


# Warnungen ausschalten
GPIO.setwarnings(False)
# Pin Nummern verwenden
GPIO.setmode(GPIO.BOARD)
# Pin 11 als Input
GPIO.setup(29, GPIO.IN)
GPIO.setup(11, GPIO.OUT)

GPIO.output(11, 0) #on

def handle(msg):
chat_id = msg['chat']['id']
command = msg['text']

print 'Got command: %s' % command
if chat_id == chat_id_auth:
if command == '/status':
bot.sendMessage(chat_id, 'online')
elif command == '/picture':
bashCommand = 'wget --output-document snapshot.jpg http://127.0.0.1:8080/?action=snapshot'
subprocess.check_output(bashCommand, shell=True)
print ('downloaded photo')
bot.sendPhoto(chat_id, open('snapshot.jpg','rb'), caption='Printer Status')
print ('sent photo')
bashCommand = 'rm snapshot.jpg'
subprocess.check_output(bashCommand, shell=True)
print ('removed photo')
elif command == '/ip':
bashCommand = 'ifconfig eth0 | grep \'inet addr:\' | cut -d: -f2 | awk \'{ print $1}\''
output = subprocess.check_output(bashCommand, shell=True)
bot.sendMessage(chat_id, output)
print(output)
elif command == '/on':
#bashCommand = 'echo \'0\' > /sys/class/gpio/gpio17/value'
#output = subprocess.check_output(bashCommand, shell=True)
GPIO.output(11, 0) #on
bot.sendMessage(chat_id, 'Drucker wird eingeschaltet..')
#print(output)
elif command == '/off':
#bashCommand = 'echo \'1\' > /sys/class/gpio/gpio17/value'
#output = subprocess.check_output(bashCommand, shell=True)
GPIO.output(11, 1) #off
bot.sendMessage(chat_id, 'Drucker wird ausgeschaltet..')
#print(output)
else:
bot.sendMessage(chat_id, 'You are not authorized.')



bot = telepot.Bot('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
bot.message_loop(handle)
print 'I am listening ...'


global n
n=0
while True:
if GPIO.input(29):
if GPIO.input(11) == 0:
if n >= 300: #Taster 3s halten zum Ausschalten
GPIO.output(11, 1) #off
n=0
time.sleep(2)
elif GPIO.input(11) == 1:
GPIO.output(11, 0) #on
n=0
time.sleep(2)
time.sleep(0.01)
n+=1
else:
n=0
print n

GPIO.cleanup()

最佳答案

我看不出发生崩溃的明确原因,但是当什么都不做时(没有按下按钮),最后的while循环似乎很忙。据我了解,它会立即打印0并循环播放,因此它将尽可能快地打印零,并使Raspi尽可能保持繁忙。也许负载是您遇到任何崩溃的间接原因(但这只是疯狂的猜测)。

无论如何,我建议改善这种繁忙的等待。即使它不能解决崩溃问题,它也会改善您的代码。为此,只需在time.sleep(0.1)分支中添加else:即可每秒最多循环十次(而不是CPU的最快速度)。

无论如何,您都应该调试这种情况。找出为什么会发生车祸。

  • 将您的输出记录到某个文件中。 (./script.py >& script.log)
  • try / except您的异常并打印调试内容,以防您发现某些异常。
  • 无论启动它的人,都应监视其退出代码并进行记录。
  • 收到的Unix信号导致退出代码为128 +信号编号。
  • 在命令行上键入kill -l以查看所有信号及其编号的列表。
  • 关于python - Raspi Python脚本不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43227060/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com