在.profile中运行程序会降低GUI startx的速度

时间:2016-10-19 14:24:05

标签: python linux bash raspberry-pi .bash-profile

我想运行一个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()

1 个答案:

答案 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