Python不断解析控制台输入

mατ*_*ĸøb 5 python console raw-input

我正在编写一个Python脚本来解析来自QR阅读器(系统被视为键盘)的输入.

目前我正在使用,raw_input()但此功能等待EOF /行尾符号,以便将收到的字符串提交给程序.我想知道是否有一种方法可以连续解析输入字符串,而不仅仅是在行末端限制的块中.

在实践中: - 在python中是否有一种方法可以异步并连续地解析控制台输入?- 有没有办法改变raw_input()(或等效函数)寻找另一个字符,以便将字符串读取提交到程序中?

gol*_*ith 1

看来您通常试图解决两个问题:

  1. 分块读取输入
  2. 异步解析输入

对于第一部分,它会根据您调用的输入函数的具体情况而有很大差异,但对于标准输入,您可以使用类似的东西

sys.stdin.read(1)
Run Code Online (Sandbox Code Playgroud)

至于异步解析,您可以采取多种方法。Python 是同步的,因此您必然需要涉及一些子进程调用。使用子进程库手动生成函数是一种选择。您还可以使用 Redis 或一些轻量级作业队列之类的工具来弹出输入块,并让另一个后台脚本读取和处理它们。最后,gevent是一个非常流行的基于协程的库,用于生成异步进程。使用 gevent,整个设置看起来像这样:

class QRLoader(object):
    def __init__(self):
        self.data = []

    def add_data(data):
        self.data.append(data)

        # if self._data constitutes a full QR code
        # do something with data
        gevent.spawn(parse_async)

def parse_async():
    # do something with qr_loader.data

qr_loader = QRLoader()

while True:
    data = sys.stdin.read(1)
    if data:
        qr_loader.add_data(data)
Run Code Online (Sandbox Code Playgroud)