我想运行一个python程序,在启动时轮询键盘/登录我的覆盆子pi。
以前的尝试包括cron作业(由于缺少stdin或stdout而失败)。
rc.local
也失败了,因为它没有标准输入(它被卡在永久循环中 - 现在 很有趣逃脱)
因此我已将命令放入.profile中,这看起来效果很好!当Pi打开但 ...
时,程序的功能与预期完全一致当我尝试按startx
启动GUI时,屏幕变黑并完全无法启动。它似乎与Ppython程序有关,因为当我从bash
.profile中删除它时,一切正常。
任何帮助都会受到大力赞赏!
更新
我创建了一个也输出到LED的脚本(一个简单的Red-Yellow-Green序列),当startx
运行时,.profile似乎再次执行 ?如果是这样的话?
下面是我的.profile代码,然后是我的python程序
.profile lines
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
poll_keyboard.py
import thread
import time
def input_thread(L):
key = raw_input()
L.append(key)
thread.exit() #Should close thread at end
def do_print():
L = []
thread.start_new_thread(input_thread, (L,))
i = 0
while True:
print "Hello World %d" % i
if L: #If anything has been detected
break
i += 1
time.sleep(0.5)
return L
key = do_print()
print "Key press detected: %s. Exiting in 2" % key
time.sleep(2)
exit()
答案 0 :(得分:0)
首先,如果shell是交互式的,那么你应该只运行它
test -t 0 && {
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
}
其次,Xorg使用Xorg驱动程序截取您的键盘代码(在这种情况下可能是evdev
驱动程序)。这就是为什么你不能用raw_input()
记录密钥的原因,如果Xorg不工作,我也不会感到惊讶。
请记住,您没有记录"键盘"在你的python代码中。相反,您正在阅读进程stdin
(fd = 0)。如果它被挂钩到tty,那么你就可以记录键盘,但即便如此,你仍然可能会输入cooked
。