gpt4 book ai didi

python - Pyserial 不能很好地与虚拟端口配合使用

转载 作者:太空狗 更新时间:2023-10-29 19:37:22 24 4
gpt4 key购买 nike

动机

我想开始学习如何使用 python 库 Pyserial .这似乎是一个非常好的图书馆,适合很多人。我想将它用于即将进行的项目,在该项目中我必须自动化串行通信。

环境

我正在运行 Ubuntu 15.04。我正在使用 Python 2.7。

设置虚拟端口

我目前没有可以通过串行端口与之通信的设备。我正在使用 socat应用程序创建两个相互连接的虚拟端口,波特率为 9600。

$ socat -d -d pty,raw,echo=0,b9600 pty,raw,echo=0,b9600
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/2
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/4
2016/01/16 12:57:51 socat[18255] N starting data transfer loop with FDs [5,5] and [7,7]
$ echo "hello" > /dev/pts/2
$ cat /dev/pts/4
hello

太棒了!这些端口似乎可以正常工作!

一个简单的 pyserial 脚本

我使用pip安装pyserial

$ sudo pip install pyserial

然后我写了一点serialtest.py

#!/usr/bin/env python
import serial

ser = serial.Serial('/dev/pts/2', 9600)

这就是 serialtest.py 的全部内容

运行脚本遇到错误

$ python serialtest.py 
Traceback (most recent call last):
File "serialtest.py", line 4, in <module>
ser = serial.Serial('/dev/pts/2')
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialutil.py", line 180, in __init__
self.open()
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialposix.py", line 311, in open
self._update_dtr_state()
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialposix.py", line 605, in _update_dtr_state
fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str)
IOError: [Errno 22] Invalid argument

这是怎么回事?

调试失败

This guy说他在使用python 2.6时成功了。我无法让 Pyserial 与 2.6 一起工作。

This guy波特率有问题。我用命令 $stty -F/dev/pts/2 仔细检查了我的波特率,并确认它实际上是 9600 的波特率。

This guy还声称波特率有问题并将其归因于他的内核。那是在 2012 年,所以我认为它不再相关了。

我的问题

如何让我的 serialtest.py 脚本无错误地运行?

最佳答案

为了完成此问答,这是一个解决方案(如 Austin Philips 在链接中找到的):

#!/usr/bin/env python
import serial

ser = serial.Serial('/dev/pts/2', 9600, rtscts=True,dsrdtr=True)

查看此 PySerial Github issue以获得更多解释。

关于python - Pyserial 不能很好地与虚拟端口配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831131/

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