Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 覆盆子皮元';不要在启动时运行脚本_Python_Linux_Raspberry Pi - Fatal编程技术网

Python 覆盆子皮元';不要在启动时运行脚本

Python 覆盆子皮元';不要在启动时运行脚本,python,linux,raspberry-pi,Python,Linux,Raspberry Pi,该程序将使用条形码扫描仪验证优惠券是否完好,并根据优惠券是否有效闪烁红灯或绿灯 我希望它工作的方式是打开Pi,然后立即能够扫描优惠券。Pi所要做的就是在我打开Pi并保持打开状态后开始程序,仅此而已。我正在使用crontab开始以下程序: #Adam Giancola #June 5th 2015 #This program will scan a bar code and if it matches a good bar code will flash a light #gr

该程序将使用条形码扫描仪验证优惠券是否完好,并根据优惠券是否有效闪烁红灯或绿灯

我希望它工作的方式是打开Pi,然后立即能够扫描优惠券。Pi所要做的就是在我打开Pi并保持打开状态后开始程序,仅此而已。我正在使用crontab开始以下程序:

#Adam Giancola 
#June 5th 2015

#This program will scan a bar code and if it matches a good bar code will         flash a light
#green or red depending on the validity of the coupon.

import sys, select, os
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

greenLED = 16
redLED = 12

GPIO.setup(greenLED, GPIO.OUT)
GPIO.setup(redLED, GPIO.OUT)
GPIO.output(greenLED, GPIO.LOW)
GPIO.output(redLED, GPIO.LOW)
goodBarCode = "0827112134023"

try:
    #Flash LED to test if script is running at RPi boot

    GPIO.output(greenLED, GPIO.HIGH)
    time.sleep(0.5)
    GPIO.output(greenLED, GPIO.LOW)
    time.sleep(0.5)

    while(1):
        userBarCode = input("")

        if userBarCode == goodBarCode:
            GPIO.output(greenLED, GPIO.HIGH)    
            time.sleep(0.5)
            GPIO.output(greenLED, GPIO.LOW)
            time.sleep(0.5)

        else:
            GPIO.output(redLED, GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(redLED, GPIO.LOW)
            time.sleep(0.5)

except:
    GPIO.cleanup()

如果我使用“sudo python3…诸如此类”在终端上运行它,那么这些代码可以正常工作,但是我已经使用crontab在引导时启动了程序,并且没有从指示灯得到任何反馈。我知道我的crontab配置正在运行,因为我已经运行了其他程序,它们正在运行。为什么LED没有响应?

问题是条形码扫描仪假装是键盘。当您从控制台运行它时,无论条形码扫描仪输出什么,都将进入您的程序,因为它是当前在控制台的stdin上读取的

当您在后台运行它时,通过rc.local、cron、init script或任何其他方法,您的程序将不在控制台上,而是在后台,因此它不会“看到”条形码扫描仪在键盘上键入的内容

对您来说,最好的短期解决方案可能是在控制台上启用自动登录(GUI必须关闭),并在登录后立即调用您的程序,简短版本:

编辑/etc/inittab并将相应的行更改为:

 1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

问题是条形码扫描器假装是键盘。当您从控制台运行它时,无论条形码扫描仪输出什么,都将进入您的程序,因为它是当前在控制台的stdin上读取的

当您在后台运行它时,通过rc.local、cron、init script或任何其他方法,您的程序将不在控制台上,而是在后台,因此它不会“看到”条形码扫描仪在键盘上键入的内容

对您来说,最好的短期解决方案可能是在控制台上启用自动登录(GUI必须关闭),并在登录后立即调用您的程序,简短版本:

编辑/etc/inittab并将相应的行更改为:

 1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1


为什么不创建一个init.d脚本来启动进程而不是crontab呢?不过,您必须使用screen或fork之类的方法来完成这个过程。我怀疑您错过了hashbang,它会告诉您使用什么解释器。试试
#/usr/bin/env python
也许?Nathan我将此添加到py脚本中?将其添加到/etc/rc.local而不是cron中如何?dastaan我这样做了,得到了相同的结果,它启动了,但我的代码似乎有问题,不允许程序继续运行。为什么不创建一个init.d脚本来启动进程,而不是crontab?不过,您必须使用screen或fork之类的方法来完成这个过程。我怀疑您错过了hashbang,它会告诉您使用什么解释器。试试
#/usr/bin/env python
也许?Nathan我将此添加到py脚本中?将其添加到/etc/rc.local而不是cron中如何?dastaan我这样做了,得到了相同的结果,它启动了,但我的代码似乎有问题,不允许程序继续运行。为什么不创建一个init.d脚本来启动进程,而不是crontab?不过,您必须使用screen或fork之类的方法来完成这个过程。我怀疑您错过了hashbang,它会告诉您使用什么解释器。试试
#/usr/bin/env python
可能?Nathan我将此添加到py脚本中?将其添加到/etc/rc.local而不是cron如何?dastaan我这样做了,得到了相同的结果,它启动了,但我的代码似乎有问题,不允许程序继续运行。@Cola,很高兴知道这是否对你有用,因为它可能会帮助别人。@Cola,很高兴知道这是否对你有用,因为它可能会帮助别人。@Cola,很高兴知道这是否对你有用,因为它可能会帮助别人。