Python 2.7:serial.serialutil.SerialException:端口已打开。如何关闭这个端口?
Posted
技术标签:
【中文标题】Python 2.7:serial.serialutil.SerialException:端口已打开。如何关闭这个端口?【英文标题】:Python 2.7: serial.serialutil.SerialException: Port is already open. How to close this port? 【发布时间】:2017-11-02 16:48:09 【问题描述】:我试图向 Arduino 发送整数,所以我在 Python 2.7 版本中编写了以下代码:
import serial
import time
ser = serial.Serial('COM8', 9600, timeout = 1)
# let it initialize
ser.open()
time.sleep(2)
ser.write(1)
while 1:
bytess = ser.readline()
print 'you sent : ' + bytess
在这里,我忘记使用ser.close()
,所以现在当我再次尝试运行上面的代码时,它显示错误:
File "D:/python/python to arduino.py", line 20, in <module>
ser.open()
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 41, in open
raise SerialException("Port is already open.")
serial.serialutil.SerialException: Port is already open.
为了避免这个错误,我拔下我的 Arduino 电缆并重新启动 Python,但它没有帮助。在 Matlab 中对于同样的问题,如果我们关闭 Matlab,问题就解决了,但 Python 不会发生同样的事情。我想知道现在如何关闭这个开放的端口。即使重新启动我的笔记本电脑,也会出现同样的错误。
谢谢。
【问题讨论】:
只需在ser.open()
之前添加ser.close()
。
【参考方案1】:
在pySerial documentation about the Serial
class:
当一个port被给定时,该端口在对象创建时立即打开。 port 为
None
且需要连续调用open()
时不会打开。
所以当你做ser = serial.Serial('COM8', 9600, timeout = 1)
时,你已经打开了你指定'COM8'
的端口,所以你不必再次打开它。
【讨论】:
【参考方案2】:我也发现了这个问题。 我的串口是 RS232,只需将接地/RX/TX 从我的设备连接到笔记本电脑。 我只是忽略了打开步骤和直接将 cmd 写入串行,但我得到了收集反馈。 所以,我想在某些情况下我们不必在处理它之前打开串行
【讨论】:
以上是关于Python 2.7:serial.serialutil.SerialException:端口已打开。如何关闭这个端口?的主要内容,如果未能解决你的问题,请参考以下文章
centos6默认python2.6升级2.7 卸载python2.6升级2.7
由于系统 Python 2.7 的要求,Pygame 安装失败,即使我有 Python 2.7