我也有类似的问题,但有一段时间没能找到解决方案。看起来这在带有一些hackery的Windows上是可能的,但问题在于posix更深层次。
理想情况下,您应该能够在打开连接之前设置 DTR。像这样:
import sys,serial
ser = serial.Serial()
ser.baudrate=57600
ser.port = sys.argv[1]
ser.dsrdtr = True
ser.setDTR(level=False)
ser.open();
print ser.readline()
但这会在 serialposix.py 中引发 portNotOpenError:
def setDTR(self,on=1):
"""set terminal status line"""
if not self.fd: raise portNotOpenError
if on:
fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str)
else:
fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str)
我深入研究了serialposix.py,您将看到根本问题所在。上面定义的 self.fd 实际上是:
self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK)
如果您编写一个小脚本使用 来打开您的设备os.open(device, flags)
,您会看到它重置,即使您使用标志以只读方式打开它也是如此os.O_RDONLY
。
深入挖掘标志的含义os.open
——我们发现 open 命令实际上包装了 unix 命令 open(2)。手册页在这里。
如果您找到更满意的解决方案,请告诉我。