1

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

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

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

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

编辑:这个项目将在 CentOS 或某种 Linux 版本中运行。

4

1 回答 1

1

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

如果您不熟悉这些概念,那么您将面临一个漫长而有趣的学习过程 :-)

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

于 2012-11-15T20:37:50.717 回答