首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python重定向标准

Python重定向标准
EN

Stack Overflow用户
提问于 2012-11-16 04:05:46
回答 1查看 1.1K关注 0票数 1

我正在尝试设置一个条形码扫描器对象,它将捕获来自扫描器本身的任何输入。条形码扫描器被识别为标准输入(stdin),因此每当我扫描条形码时,我都会得到标准输入文本。还将有一个连接到系统的键盘,这是另一个标准输入。为了区分条形码扫描输入和键盘输入,我将对任何条形码信息使用前缀。换句话说,如果我的条形码的总长度是16个字符,那么前4个字符将是一个预定的字符串/键,以指示后面的12个字符是条形码输入。根据我所读到的,这是相当标准的。

现在,我见过的大多数示例都可以通过捕获GUI应用程序中的字符输入事件来识别条形码输入。然后,此事件回调方法将构建一个缓冲区来检查4个字符的前缀,并根据需要重定向条形码输入。事件回调方法还将跳过任何与条形码无关的字符输入事件,并允许它们像通常的标准输入一样与GUI交互(在文本框中键入或执行其他操作)。

除了不使用GUI应用程序之外,我还想做同样的事情。我希望我的条形码扫描器对象独立于GUI应用程序。理想情况下,我应该在条形码扫描器对象中有一个回调方法,每次输入字符时,stdin都会调用该方法。从那里,我会通过检查4个字符的前缀来抓取任何条形码输入,并传递任何不属于条形码输入的字符。因此,换句话说,我希望stdin通过我的条形码扫描器回调方法,然后让我的条形码扫描器回调方法能够将非条形码字符作为标准输入传回,就好像什么都没有发生一样(仍然是转到文本框或其他地方的标准输入)。

如果没有一个while循环不断地监视stdin,这是可能的吗?即使我有一个监控stdin的while循环,如果字符不是条形码输入,我如何将它们作为stdin输出?我考虑过使用pyusb来接管条形码扫描器的USB接口,但这需要root权限才能与硬件交互(对于我的项目来说,这不是一个选项)。任何帮助都将不胜感激。我还没有找到一个这样的例子。

编辑:此项目将在CentOS或某种风格的Linux中运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-16 04:37:51

在Unix中,拦截标准输入的常规方法是管道和多进程。如果您有一个多进程应用程序,那么一个进程可以接收“原始”标准输入,捕获条形码输入,并将其余的传递到其标准输出。然后,该输出将成为仅接收非条形码数据的UI流程的标准输入。要进行初始设置,只需使用一个启动进程来设置管道,启动其他两个进程,然后退出。

如果您是这些概念的新手,您将有一个漫长而有趣的学习过程:-)

所有这些都假设您确实是通过标准输入接收“键盘”数据,而不是通过您似乎暗示的X11事件。如果您在X11 (或GTK等)中进行开发。那么我所描述的几乎肯定是行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13405277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档