gpt4 book ai didi

python - RPi - 启动时运行的 Python Curses 程序没有键盘焦点

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:13 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序将在我的树莓派启动时运行,并允许我立即开始使用我的键盘输入内容并让程序接收它。我不想在 pi 启动时手动启动程序。我需要使用 curses(或类似的无缓冲键盘输入库),因为我在 2x16 I2C LCD 上显示我正在输入的内容,但我还需要将我正在输入的所有内容记录到文本文件中。

现在,我通过在 rc.local 中添加一行来在启动时自动启动程序。这有效,I2C 显示器正确显示程序输出,但它不响应键盘输入,而是在一个奇怪的控制台上显示键盘输入(当我将馅饼连接到屏幕时,目标是 headless 运行)当我按下 enter 并说 -bash: 'whatever I just typed' command not found 时退出的布局。

我已经试过了:

  1. 在程序开始时设置一个计时器,等到 pi 完全启动后再初始化 curses 窗口和键盘捕获

  2. 创建一个单独的 python 程序以等待 pi 完全启动,然后通过导入运行主脚本

虽然这些方法都不起作用,但我遇到了同样的问题,只是略有不同。

需要说明的是,如果我从命令行手动运行该程序,它会完美运行。但是当我使用 rc.local 自动启动脚本时,程序没有键盘输入(或者至少不是应该输入的地方)。

我的代码:

 #!/usr/bin/python
import I2C_LCD_driver, datetime, sys
from time import *
from subprocess import call

mylcd = I2C_LCD_driver.lcd()

for x in range(30): #waits for raspberry pi to boot up
mylcd.lcd_display_string("Booting Up: "+str(x), 1)
sleep(1)

import curses
key = curses.initscr()
curses.cbreak()
curses.noecho()
key.keypad(1)
key.nodelay(1)

escape=0
while escape==0:
#variable initialization

while 1:
k=key.getch()
if k>-1: #runs when you hit any key. getch() returns -1 until a key is pressed
if k==27: #exits the program when you hit Esc
break
elif k==269:
# a couple other special Function key cases are here
else:
inpt=chr(k)
mylcd.lcd_display_string(inpt,2,step) #writes the last character to the display
#some more code that handles writing the text to the LCD, which works flawlessly when run manually.

file.write("%s\r\n" % entry)
file.close()
mylcd.lcd_display_string("Saved ",2)
mylcd.lcd_display_string("F1 New F2 PwrOff",1)
while 1:
k=key.getch()
if k>-1:
if k==265: #do it again! with F1
mylcd.lcd_clear()
break
elif k==266: #shut down with F2
escape=1
break
curses.nocbreak()
key.keypad(0)
curses.echo()
curses.endwin()
call("sudo shutdown -h now", shell=True)

如果这很重要,我在/etc/rc.local 中的行如下:

sudo python3 journal.py &

然后是“exit 0”行。感谢您的任何帮助,您可以提供。我知道这是一个非常具体的问题,重现起来很乏味,但如果有人对自动启动功能有所了解,我将非常感谢任何提示。

最佳答案

好吧,实际上我所要做的(在对 stackexchange 进行更多研究后我确实发现了,this 是包含我正在寻找的答案的线程)是从 ~/.bashrc 而不是/运行我的程序等/rc.local。这种方法非常有效,正是我想要的。

关于python - RPi - 启动时运行的 Python Curses 程序没有键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com