【问题标题】:Scanned Input in python as a single Inputpython中的扫描输入作为单个输入
【发布时间】:2018-02-15 07:02:25
【问题描述】:

我编写了这段代码,用于处理来自条形码扫描仪的扫描输入。但是这里的输入来自单行,我无法区分下一个扫描的输入和过去的输入。这是我的代码:

from evdev import InputDevice, categorize, ecodes
import select

dev = InputDevice('/dev/input/event2')
data = ""

def parse_key_to_char(val):
    return CODE_MAP_CHAR[val] if val in CODE_MAP_CHAR else ""

for event in dev.read_loop():
    if event.type == ecodes.EV_KEY:
        e = categorize(event)
        if e.keystate == e.key_up:
            print parse_key_to_char(e.keycode)

输出是:

0
7
5
6
7
8
1
6
4
1
2
5

虽然预期的输出是:

075678164125

如果我在同一个终端,它可以工作,但如果我专注于其他终端,它将无法工作。我希望在后台捕获这些输入并将它们传递给正在调用当前函数的其他函数。

【问题讨论】:

  • 看来问题可能出在您的 parse_key_to_char() 函数中。
  • def parse_key_to_char(val): 返回 CODE_MAP_CHAR[val] if val in CODE_MAP_CHAR else ""
  • 不要在 cmets 中发布代码,如果相关,请编辑/添加到您的帖子中
  • 已编辑但我错误地在评论中添加了代码。
  • How to print without newline or space? 的可能重复项假设您使用的是 Python 2,我强烈 推荐 __future__ 导入并使用新版本。未来证明您的代码并且是一个更简洁、更直观的解决方案。

标签: python input raspberry-pi evdev


【解决方案1】:

print 自动在打印文本的末尾添加一个新行。您需要将所有符号添加到一个字符串中,然后打印它:

for event in dev.read_loop():
    if event.type == ecodes.EV_KEY:
        e = categorize(event)
        if e.keystate == e.key_up:
            text = text + parse_key_to_char(e.keycode)
print text

PS。 print后面可以加逗号,这样就没有换行了,只有一个空格:

for i in range (5):
    print i,

输出:

0 1 2 3 4

【讨论】:

  • read_loop 是一个无限循环,因此它不会在 for 循环之外终止打印。
  • 您如何确定一个输入何时结束而另一个输入何时开始?
  • 根据 python 版本,print 可能需要为print() (Python 3)
  • @DavidOwens 是的,但是发布的代码没有 () 所以它不是 Python 3 ;) 据我所知,Python2 是 RasPi 上的默认版本。
  • @Psytho 我想弄清楚这一点。但是由于在特定输入之后,我正在编写一个线程来清除变量并捕获新变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多