Pyserial不能像linux sh那样写入tty

2024-09-27 00:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

echo 'CMD' > /dev/ttyPS1

我试图使用Pyserial模块在Python中重新创建这个操作,但是什么也没有发生。我尝试在.py文件和2.7解释器内部使用它(以防出现时间延迟问题)。在

^{pr2}$

有趣的是。。。在运行python代码段之后,我无法使用linuxshell写入设备。stty向我展示了Pyserial为设备添加了一系列选项。如果我清除这些额外的选项,那么我就可以使用linuxshell再次与我的设备进行通信。在

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像linuxshell一样工作?在


Tags: devecho脚本linux选项lineshellstty
1条回答
网友
1楼 · 发布于 2024-09-27 00:15:28

如果您真的想让pyserial在不更改所有这些标志的情况下打开设备文件,或者显式地让它将标志更改为它们已经具有的值,那么您可能可以使用一系列选项参数来实现这一点,也可以在构造之后设置一些属性或调用一些方法。在


但你为什么要这么做?在

如果您只想执行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,但其他情况类似:

^{pr2}$

相关问题 更多 >

    热门问题