Pyserial Com3 端口没有输出? Windows 7

Pyserial Com3 Port no output? Windows 7

我正在尝试使用 PySerial 从简单的 COM3 USB 串行端口读取数据。

我的代码如下:

import serial
import time

ser = serial.Serial("COM3", 230400, timeout=2) #Also tried timeout=None, loads to infinity then
print (ser)

while True:
  line = ser.readline() #also tried read()
  print(line)
  time.sleep(1)

控制台输出:

print(ser) =>Serial<id=0x2757c50, open=True>(port='COM3', baudrate=230400, bytesize=8, parity='N', stopbits=1, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False)

我试图弄乱 Serial 对象的布尔属性 ser(例如 xonxoff)但没有成功

print(line) => empty stringb''

我试图在 Python 2.7 和 Python 3.6.5 中对此进行测试。

通过 serial.tools.list_ports.comports() returns 列出所有 COM 端口:

COM3 - USB Serial Port (COM3)
COM46 - com0com - serial port emulator CNCA0 (COM46)
COM47 - com0com - serial port emulator CNCB0 (COM47)

当我使用程序 HDTerm 时,我得到以下输出: Screenshot_HDTerm_COM3_Port_Output

所以端口实际上是 returns 的东西,但我无法以某种方式从 python 读取数据。我的 Python 代码中的参数与 HDTerm 中的参数相同。

知道为什么 Python 不打印任何内容(或者如果 timeout=None 则加载到无穷大)吗?

PS.: COM46 和 COM47 在 Python 和 HDTerm 中运行良好。但它们有其他输出(仅相互发送和接收数据)。

如果我没猜错的话。
尝试

type(ser)

这样你就会知道'ser'的类型,如果它是可迭代的(列表,元组等...),你可以尝试:

for s in ser:
    print s
    time.sleep(1)

希望对您有所帮助。

现在我自己解决了这个问题

我不得不做 ser.dtr=False

即使 print(ser) 显示参数 dsrdtr=False(我将其解释为 "dsr and dtr"),属性 set.dtr 仍然存在成为 True(使用 print(set.dtr) 进行测试。

您必须手动将 dtr 设置为 False,如上所示。我觉得有点奇怪,也许是一个错误?