Python:写入和读取串行端口

Python:写入和读取串行端口,python,serial-port,pyserial,Python,Serial Port,Pyserial,我已经阅读了文档,但似乎找不到关于这个问题的直接答案。 我有一个连接到计算机的调制解调器正在使用的所有COM端口的列表。从这个列表中,我尝试打开它,向它发送一个命令,如果它说了什么,就把它添加到另一个列表中。我不完全确定我是否正确使用了pyserial的读写函数 i=0 for modem in PortList: for port in modem: try: ser = serial.Serial(port, 9600, timeout=1)

我已经阅读了文档,但似乎找不到关于这个问题的直接答案。 我有一个连接到计算机的调制解调器正在使用的所有COM端口的列表。从这个列表中,我尝试打开它,向它发送一个命令,如果它说了什么,就把它添加到另一个列表中。我不完全确定我是否正确使用了pyserial的读写函数

i=0
for modem in PortList:
    for port in modem:
        try:
            ser = serial.Serial(port, 9600, timeout=1)
            ser.close()
            ser.open()
            ser.write("ati")
            time.sleep(3)
            print ser.read(64)
            if ser.read(64) is not '':
                print port
        except serial.SerialException:
            continue
        i+=1
我没有从ser.read()中得到任何东西。我总是得到空白字符串。

ser.read(64)
应该是
ser.read(size=64)
;ser.read使用关键字参数,而不是位置参数

而且,您正在从端口读取两次数据;您可能想做的是:

i=0
for modem in PortList:
    for port in modem:
        try:
            ser = serial.Serial(port, 9600, timeout=1)
            ser.close()
            ser.open()
            ser.write("ati")
            time.sleep(3)
            read_val = ser.read(size=64)
            print read_val
            if read_val is not '':
                print port
        except serial.SerialException:
            continue
        i+=1

一段使用python读取rs232的代码 以防万一别人需要它

ser = serial.Serial('/dev/tty.usbserial', 9600, timeout=0.5)
ser.write('*99C\r\n')
time.sleep(0.1)
ser.close()

你试过运行它吗?您是否收到错误消息?意外输出?或者…?到底是什么问题?对不起,我忘了写下来。我总是从ser.read()中获取空白字符串。我正在打印它以查看它返回的内容。为什么在初始化它后立即关闭ser?这似乎很麻烦。我还遇到了另外两个问题:
ser.read(64)
应该是
ser.read(size=64)
,你应该把它分配给一个变量(
read\u val=ser.read(size=64)
,然后是
print read\u val
,然后是if语句),因为现在,您正在执行两个单独的读取。