- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于如何阅读 stdin
有很多很棒的答案在 python 中,但我找不到任何有关读取单个字符而不是整行的信息。让我解释一下:
我需要读取arduino在串行端口上发送的信息,该信息被转发到标准输入。该信息经过处理并存储在文本文件中。我在arduino上编写了程序,这样我就可以改变信息的发送方式。计划是发送带有开始字符 ( <
) 和结束字符 ( >
) 的信息,因此它看起来像这样: <height:2342>
还会写入很多不相关的数据,这就是为什么我决定使用上面的形式,这样python脚本就可以检测到相关信息并捕获它。
我的 python 脚本将单独检查每个字符的起始字符 <
,理想情况下是输入的,然后捕获信息,直到 >
已收到。我尝试使用 inputchar = sys.stdin.read(1)
获取输入。但这里的问题是,它是从 stdin
读取的。永远,直到捕获换行符( \n
),然后返回输入的第一个字符。
我希望此函数在发送到 stdin
后立即返回输入的字符。 ,而不是等待换行符。我该如何实现这一目标?
平台:Raspberry Pi Zero W、Raspbian Jessy、Python 2.7
我知道我可以使用 inputline = sys.stdin.readline()
并更改 Arduino 程序以在信息后发送换行符。然后分析整行(可能很长)并提取信息。但我认为这不是一个干净的方法。
串行端口更新:遗憾的是,我无法直接从 python 访问串行端口,因为还有第二个 python 脚本必须写入串行端口。由于只有一个可以访问该端口,解决方案是将串口重定向到 stdin
和stdout
。查看我的问题Access one Serial Port with two Python Scripts
最佳答案
这是因为你的terminal is in cooked mode 。您可以使用例如tty.setcbreak或curses.cbreak禁用行缓冲。这是 Unix 的事情,不是 Python 特有的。
示例:
import sys, tty
tty.setcbreak(sys.stdin.fileno())
请注意,这还有其他影响,例如禁用回显,并且在程序退出时会持续存在。通常,诸如curses上下文管理器之类的更高级别的接口(interface)用于处理键解析(例如箭头键,发送转义序列)和清理。
Python 之外的主要命令行工具是 stty 。
关于python - 如何在 Python 中从 stdin 读取单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239507/
我是一名优秀的程序员,十分优秀!