pySerial可以与Python的with
语句一起使用,如下所示:
with serial.Serial("/dev/ttyS1") as ser:
ser.write("AAAA")
ser.read(8)
我试图确切地看到pySerial确实做了什么工作,但我无法在任何地方找到__enter__
或__exit__
函数!我从pySerial目录运行grep -e '\(__enter__\)\|\(__exit__\)' *.py
,grep没有找到任何一个函数。 pySerial是如何做到的?
修改:我还尝试了以下操作来查看下一步的内容:
import serial, pdb
with serial.Serial("/dev/ttyUSB0") as ser:
pdb.set_trace()
这使我直接进入serialposix.py
close()
函数的第433行。 with
语句是否也会查找open()
和close()
函数?
答案 0 :(得分:3)
Serial
类没有实现这些方法,它从io.IOBase
继承它们。 /serial/serialposix.py的相关部分:
try:
import io
except ImportError:
# classic version with our own file-like emulation
class Serial(PosixSerial, FileLike):
pass
else:
# io library present
class Serial(PosixSerial, io.RawIOBase):
pass