编辑:我的主要问题是,是否有某种方法可以将子进程的标准输出非排他地通过管道传输到进程的标准输入中。非排他性,以便键盘仍然可以工作。两者都需要进入 raw_input 提示。
背景:我正在创建一个 python 程序,它允许购买带有二维码门票的人进入活动。该程序的主要部分是一个 raw_input() 循环,它在 csv 中搜索客人的姓名、电子邮件地址或嵌入在 QR 码中的唯一哈希。我正在尝试使用 zbarcam 扫描唯一的哈希。这几乎有效:
from subprocess import Popen, PIPE
p = Popen(["/cygdrive/c/Program Files (x86)/ZBar/bin/zbarcam", "--raw"], stdout=PIPE)
也就是说,扫描二维码并在提示符处弹出票证哈希,因此我可以按 Enter 并进行搜索。问题是 zbarcam 添加了一个换行符,所以当我按 Enter 时,它会搜索一个换行符并返回 csv 中的所有内容。在 zbarcam 输出通过管道传输到标准输出(进入 raw_input)后,我找不到任何方法来去除换行符。想想看,我什至不能使用键盘退格或删除换行符。你知道怎么做吗?我以前做过这种事情,通常是复制粘贴一个额外的换行符。
我在上述行之后添加了这一行: sys.stdin = p.stdout 并且 QR 码的换行符被解释为“输入”并且搜索过程开始了,但这只是剥夺了我输入搜索词的能力。有什么方法可以将标准输入路由到这两个?
有没有其他方法可以从键盘和 zbarcam 获取用户输入?
提前致谢!我希望我听起来很连贯——这是漫长的一天。
编辑:如果有人想用这个被深度破解的代码打自己的脑袋,他们可以看看这里https://github.com/rtwolf/qr-event-entry/blob/master/pulp_entry.py