当我启动我的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,程序在启动时开始。我遇到的问题是,它似乎只是在打印后立即关闭程序"程序正在运行"而不是等待输入,任何建议都会很棒。
答案 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