首页 > 解决方案 > Python脚本没有在启动时使用可执行文件运行,但如果我手动执行该文件,它就可以工作

问题描述

嘿,所以标题很好地描述了这个问题,在 PI 3B+ 上运行

这是如果我手动执行它会运行的launcher.sh:

#!/bin/sh
#launcher.sh

cd /
cd home/pi/SummerSeries2021
sudo python3 Main.py
cd /

这是启动时的启动日志

Traceback (most recent call last):
  File "Main.py", line 21, in <module>
    elif pirB.motion_detected:
  File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 350, in is_active
    return self.value > self.threshold
  File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 604, in value
    return super(MotionSensor, self).value
  File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 325, in value
    return self._queue.value
  File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 587, in value
    return self.average(self.queue)
  File "/usr/lib/python3.7/statistics.py", line 311, in mean
    T, total, count = _sum(data)
  File "/usr/lib/python3.7/statistics.py", line 147, in _sum
    for n,d in map(_exact_ratio, values):
RuntimeError: deque mutated during iteration

这是它自己的python脚本:

import sys
from gpiozero import MotionSensor
from adafruit_motorkit import MotorKit
from adafruit_motor import stepper
import time
import board

kit = MotorKit()
pirS = MotionSensor(4)
pirB = MotionSensor(21)
#flushcons = 3 
while True: 
    while True:
        if pirS.motion_detected:
            print("Petite")
            for i in range(100):
                kit.stepper1.onestep(style = stepper.DOUBLE)
            for j in range(100):
                kit.stepper1.onestep(direction = stepper.BACKWARD,style = stepper.DOUBLE)
            break
        elif pirB.motion_detected:
            print("Grosse")
            for k in range(100):
                kit.stepper2.onestep(style = stepper.DOUBLE)
            for l in range(100):
                kit.stepper2.onestep(direction = stepper.BACKWARD,style = stepper.DOUBLE)
            break
        else:
            print("RAS")
    kit.stepper1.release()
    kit.stepper2.release()

这是我添加到 crontab 的行

@reboot sh /home/pi/SummerSeries2021/launcher.sh >home/pi/logs/cronlog 2>&1

基本上,它会根据您挥动的 PIR 传感器激活 2 个步进电机中的一个,但我主要担心的是,如果我在 IDE 中运行脚本它可以工作,如果我在启动后手动执行启动器,它可以工作,但在启动器时不行.sh 使用 crontab 在启动时执行。

以前有人遇到过这个问题吗?

谢谢

标签: pythonpython-3.x

解决方案


推荐阅读