Python子进程stdout来处理stdin

时间:2013-04-25 05:33:01

标签: python subprocess pipe stdout stdin

编辑:我的主要问题是,是否有一些方法可以将子进程的stdout非排他地传递到进程的stdin中。非专有,以便键盘仍可正常工作。两者都需要进入raw_input提示符。

上下文:我正在创建一个python程序,允许那些在活动中使用qr代码条目购买门票的人。该程序的主要部分是循环的raw_input(),它通过csv搜索客户的名称,电子邮件地址或嵌入在QR码中的唯一哈希。我正在尝试使用zbarcam扫描唯一的哈希值。这个几乎有效:

from subprocess import Popen, PIPE
p = Popen(["/cygdrive/c/Program Files (x86)/ZBar/bin/zbarcam", "--raw"], stdout=PIPE)

也就是说,扫描QR码并在提示符处弹出票证哈希,这样我就可以点击输入并进行搜索。问题是zbarcam添加了换行符,所以当我按Enter键时,它会搜索换行符并返回csv中的所有内容。在将zbarcam输出传送到stdout(进入raw_input)之后,我找不到任何方法去除换行符。想想看,我甚至无法使用键盘退格或删除换行符。你知道怎么做吗?我以前做过那种事情,通常是通过复制粘贴一个额外的换行符。

我在上述之后添加了这一行:    sys.stdin = p.stdout 并且QR码的换行符被解释为“输入”并且搜索过程开始,但它只是带走了我输入搜索词的能力。有没有办法让stdin路由到这两个?

还有其他方法可以通过键盘和zbarcam获得用户输入吗?

提前致谢!我希望我听起来很有意思 - 过了漫长的一天。

编辑:如果有人想用这个深受黑客攻击的代码砸自己的头脑,他们可以看看https://github.com/rtwolf/qr-event-entry/blob/master/pulp_entry.py

0 个答案:

没有答案