如何让Python的input()自动回车?实现扫码器连续扫码无需手动回车
实现扫码器无需手动回车的Python连续扫码方案
扫码器本质是模拟键盘输入,解决这个问题有两种思路:优先调整扫码器硬件设置,其次用Python监听实时输入。
方案1:调整扫码器设置(推荐)
大部分商用扫码器支持通过扫描专用设置码,开启自动追加回车/换行功能。开启后,扫码器每次扫完码会自动发送回车信号,无需手动按回车,Python脚本直接用普通的input()就能连续接收内容。
方案2:Python实时监听键盘输入
如果无法修改扫码器设置,用以下两种代码实现无回车捕获:
方法A:使用pynput库监听按键
先安装依赖:
pip install pynput
代码示例:
from pynput.keyboard import Listener, Key current_scan = [] def process_key(key): try: # 记录扫码输入的普通字符 current_scan.append(key.char) except AttributeError: # 捕获扫码器发送的结束信号(回车) if key == Key.enter: scan_result = ''.join(current_scan) print(f"已扫码:{scan_result}") current_scan.clear() # 启动持续监听 with Listener(on_press=process_key) as listener: listener.join()
方法B:无依赖原始终端读取
不需要额外安装库,直接操作终端输入缓冲:
import sys import termios import tty def read_raw_char(): fd = sys.stdin.fileno() old_term = termios.tcgetattr(fd) try: tty.setraw(fd) return sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_term) scan_buffer = [] while True: char = read_raw_char() # 以回车/换行作为扫码结束标记,也可根据扫码内容长度调整判断逻辑 if char in ('\r', '\n'): if scan_buffer: print(f"已扫码:{''.join(scan_buffer)}") scan_buffer = [] else: scan_buffer.append(char)
提示:如果扫码器不发送回车信号,可以自定义结束判断,比如检测连续输入的间隔时间,或者固定长度的扫码内容。
内容的提问来源于stack exchange,提问作者Keith Böhler
相关产品推荐
相关产品推荐

