【问题标题】:Get user input in loop without '[ENTER]'在没有“[ENTER]”的情况下循环获取用户输入
【发布时间】:2014-07-28 19:37:39
【问题描述】:

我有一个从 com 端口读取的循环...

import serial

def main():
    ser = serial.Serial(11, 4800, timeout = 1)
    ser.open()
    lines = []
    while True:
        line = ser.readline()
        print(line)
        lines.append(line)
        # check for **USER**  input without stopping
        # if input == ' ' or '\n' or what have you:
            # break
    ser.close()

if __name__ == '__main__':
    main()

如何在上面的 cmets 中执行上面的伪代码?有没有可能?

【问题讨论】:

  • 不停下来输入肯定是不可能的。输入应该来自哪里?
  • 我正在寻找input(),而无需按回车键。我在尝试中读到了一些关于signalsignal.alarm() 的内容:除了,但我不喜欢它。
  • 如果没有真正的低级别和监控系统事件(例如键盘事件),您肯定会有“停止并等待返回”输入。
  • 您正在寻找一个我不确定是否存在于 Python 中的用户输入流。这也是非常糟糕的编程习惯。
  • 那么我应该怎么做才能退出循环而不计时或执行for i in range(100):...

标签: python loops input


【解决方案1】:

ser.read() 将返回读取的下一个字节。

例子:

x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)
line = ser.readline()   # read a '\n' terminated line

【讨论】:

  • 我的意思是用户输入...比如input('Please enter something and then press enter'),无需按回车
【解决方案2】:

一种方法是使用curses.window.getch(),但您必须围绕它编写一些初始化代码,例如创建一个窗口。不过,应该不会太难。

在MS Windows下,可以使用msvcrt.getch()读取字符;如果您不想阻止阅读,请不要忘记检查 msvcrt.kbhit()。

【讨论】:

  • 我也在使用 Python 3.4.1
  • 我认为 curses.window 在 Python 3 中不存在。
  • Surely it does。但如果您运行的是 MS Windows,则不支持。
  • 我已经更新了答案以包括 Windows 的情况。
  • 谢谢。它似乎应该可以工作,但是在等待输入时它会停止并且输入键不起作用。
猜你喜欢
  • 2014-12-09
  • 2022-12-17
  • 2021-11-27
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多