Python 2.7:serial.serialutil.SerialException:端口已经打开。如何关闭此端口?

时间:2017-11-02 16:48:10

标签: python-2.7 serial-port pyserial

我试图将整数发送到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没有发生同样的事情。我现在想知道如何关闭这个开放端口。即使重启我的笔记本电脑,也会出现同样的错误。

感谢。

2 个答案:

答案 0 :(得分:2)

pySerial documentation about the Serial class中:

  

当给出一个 port 时,该端口会在对象创建后立即打开。当 port None且需要连续调用open()时,它不会打开。

因此,当您执行ser = serial.Serial('COM8', 9600, timeout = 1)时,您已经按照指定的'COM8'打开了端口,因此不必再次打开它。

答案 1 :(得分:0)

我也发现了这个问题。 我的序列号是RS232,只需将设备的Grounding / RX / TX连接到笔记本电脑即可。 我只是忽略了打开步骤,而是直接将cmd写入序列,但是得到了收集反馈。 所以,我想我们在某些情况下不必先打开串行