RPi在启动时运行脚本然后停止

时间:2015-06-09 15:41:19

标签: python raspberry-pi startup hid

当我启动我的Pi时,我正在运行以下程序:

#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):
        print ("Program is running")
        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()

我想要实现的目标是打开Pi并让这个脚本运行并准备好扫描条形码,而不必与Pi交互。我已成功将程序添加到/etc/rc.local,程序在启动时开始。我遇到的问题是,它似乎只是在打印后立即关闭程序"程序正在运行"而不是等待输入,任何建议都会很棒。

3 个答案:

答案 0 :(得分:0)

我认为你只需要一个

raw_input()

而不是input()。请参阅official docs,您所做的就像eval(raw_input(""))。另外,还有其他细节可以帮你解决吗?它是否只是默默地退出?

答案 1 :(得分:0)

那么你怎么知道程序确实关闭了呢?

我的猜测是:行:

userBarCode = input("")

只是在等你输入内容,在输入内容之前没有任何反应。

答案 2 :(得分:0)

/etc/rc.local并不是我想的那个地方。 rc.local意味着运行终止的东西,你的程序不会终止,更糟糕的是你的程序似乎期望键盘输入。

我建议您将程序改为/etc/inittab。 用您的程序替换第一行而不是/sbin/getty 38400 tty1

#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6