我正在编写一个Python脚本来解析来自QR阅读器的输入(系统将其视为键盘)。
目前我正在使用raw_input()
,但此功能会等待EOF /行尾符号,以便将收到的字符串提交给程序。
我想知道是否有办法连续解析输入字符串,而不仅仅是在行末端限制的块中。
在实践中:
- 在python中有一种方法可以异步并连续地解析控制台输入吗?
- 有没有办法改变raw_input()
(或等效函数)来寻找另一个字符,以便将读取的字符串提交到程序中?
答案 0 :(得分:1)
看起来你通常会尝试解决两个问题:
对于第一部分,它会根据您调用的输入函数的具体情况而有很大差异,但对于标准输入,您可以使用类似
的内容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)