gpt4 book ai didi

python - Pyserial 不能像 linux shell 那样写入 tty

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:24 25 4
gpt4 key购买 nike

我可以在 linux shell 中使用以下命令通过 UART 与设备通信:

echo 'CMD' > /dev/ttyPS1

我尝试使用 Pyserial 模块在 Python 中重新创建此操作,但没有任何反应。我尝试在 .py 文件和 2.7 解释器内部使用它(以防出现时间延迟问题)。

import serial
ser = serial.Serial('/dev/ttyPS1', 115200)
ser.write('CMD')

有趣的是...运行 python 代码片段后,我无法使用 linux shell 写入设备。 stty 向我展示了 Pyserial 为设备添加了一堆选项。如果我清除这些额外的选项,那么我可以使用 linux shell 再次与我的设备对话。

Python 脚本之前:

>>> stty -F /dev/ttyPS1
speed 115200 baud; line = 0;
-brkint -imaxbel

在 Python 脚本之后:

>>> stty -F /dev/ttyPS1
speed 115200 baud; line = 0;
min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

为什么会发生这种行为?有没有办法让 Pyserial 像 linux shell 一样工作?

最佳答案

如果你真的想让 pyserial 打开设备文件而不改变所有这些标志,或者明确地让它改变标志到他们已经拥有的值,你可以用一堆the constructor 的选项参数,或者在构建之后设置一些属性或者调用一些方法。


但是你为什么要这样做呢?

如果你只想做与 echo 等价的事情,只需做 shell 和 echo 命令正在做的事情:将设备文件作为文件打开并写入它.

因此,其中之一:

with open('/dev/ttyPS1', 'wb') as ps1:
ps1.write(b'CMD')

with open('/dev/ttyPS1', 'wb', buffering=0) as ps1:
ps1.write(b'CMD')

with open('/dev/ttyPS1', 'wb') as ps1:
ps1.raw.write(b'CMD')

ps1 = os.open('/dev/ttyPS1', os.O_WRONLY)
os.write(ps1, b'CMD')
os.close(ps1)

如果您使用的是 Python 2.x,则不需要 b 前缀,也没有 .raw,但其他情况类似:

with open('/dev/ttyPS1', 'wb') as ps1:
ps1.write('CMD')

with open('/dev/ttyPS1', 'wb', 0) as ps1:
ps1.write('CMD')

ps1 = os.open('/dev/ttyPS1', os.O_WRONLY)
os.write(ps1, 'CMD')
os.close(ps1)

关于python - Pyserial 不能像 linux shell 那样写入 tty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50915224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com