问题描述
我正在用 Python 运行 Raspbian Lite 的 RaspBerry Pi 3 对一串 LED 矩阵面板进行编程,用户需要选择他们想要运行的程序(滚动新闻提要、股票价格、天气等) .我的计划是将无线数字键盘连接到 Pi,在那里可以使用箭头键选择脚本。我已经让整个过程完美运行;但是,我在安排脚本在启动时运行时一直遇到问题。
我尝试过使用 rc.local、systemd 和 crontab,但我通常会遇到同样的错误:termios.error: (25,'Inappropriate ioctl for device')
我猜我在启动时用于运行脚本的方法只是用于没有用户交互的守护进程,因此没有标准输入设置。启动时有一个登录屏幕,所以可能是键盘专用于该屏幕而不是我的程序。有没有什么简单的方法可以在启动时运行交互式脚本而无需事先登录或输入任何内容?
我用一个更短的脚本复制了这个问题,该脚本只处理我程序的输入部分(我从网上的博客文章中获取了下面的大部分代码,我是这方面的菜鸟)。同样,当我手动运行它时,这工作正常,但我无法在启动时运行它。对我来说,错误发生在 oldterm = termios.tcgetattr(fd)
行上:
import os
import termios
import fcntl
import select
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON
newattr[3] = newattr[3] & ~termios.ECHO
termios.tcsetattr(fd,termios.TCSANow,newattr)
oldflags = fcntl.fcntl(fd,fcntl.F_GETFL)
fcntl.fcntl(fd,fcntl.F_SETFL,oldflags | os.O_NONBLOCK)
while True:
inp,outp,err = select.select([sys.stdin],[],[])
c = sys.stdin.read()
print('Key pressed: ' + c)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)