Python不断解析控制台输入

时间:2013-12-18 15:47:22

标签: python console raw-input

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

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

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

1 个答案:

答案 0 :(得分:1)

看起来你通常会尝试解决两个问题:

  1. 以块的形式阅读输入
  2. 异步解析该输入
  3. 对于第一部分,它会根据您调用的输入函数的具体情况而有很大差异,但对于标准输入,您可以使用类似

    的内容
    sys.stdin.read(1)
    

    至于异步解析,您可以采取多种方法。 Python是同步的,因此您必须涉及一些子进程调用。使用the subprocess library手动生成函数是一种选择。您还可以使用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)