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被给定时,该端口在对象创建时立即打开。 portNone 且需要连续调用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

如何从 Python 3.2 降级到 2.7?

为啥我必须将 Qt Designer 2.7 与 Python 2.7 一起使用?

linux升级python到2.7版本

Python升级版本2.6到2.7