Python PySerial客户端无法写入数据

Python PySerial客户端无法写入数据,python,python-2.7,pyserial,Python,Python 2.7,Pyserial,我正试图编写一个python程序,它可以使用PySerial模块通过串行接口进行通信,如下所示: import serial if __name__ == '__main__': port = "/dev/tnt0" ser = serial.Serial(port, 38400) print ser.name print ser.isOpen() x = ser.write('hello') ser.close() print "Done

我正试图编写一个python程序,它可以使用PySerial模块通过串行接口进行通信,如下所示:

import serial
if __name__ == '__main__':
    port = "/dev/tnt0"
    ser = serial.Serial(port, 38400)
    print ser.name
    print ser.isOpen()
    x = ser.write('hello')
    ser.close()
    print "Done!"
但如果执行上述操作,则会出现以下错误:

/dev/tnt0
True
Traceback (most recent call last):
File "/home/root/nested/test.py", line 15, in <module>
x = ser.write('hello')
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 518, in write
raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 22] Invalid argument
/dev/tnt0
真的
回溯(最近一次呼叫最后一次):
文件“/home/root/nested/test.py”,第15行,在
x=ser.write('你好')
写入文件“/usr/local/lib/python2.7/dist packages/serial/serialposix.py”,第518行
引发SerialException('写入失败:%s'(v,))
serial.serialutil.SerialException:写入失败:[Errno 22]参数无效
我参考了pyserial文档,并认为这应该可以正常工作。请让我知道我在这方面做错了什么。

蒂亚

/dev/tntX
是模拟端口对,要成功执行读写操作,需要从一对端口中打开两个端口


将其视为一个管道-如果一端关闭,您将无法将数据推入。

出于某种原因,为了使用模块
tty0tty
,您需要同时打开
/dev/tnt0
/dev/tnt1
,或任何其他对(例如
/dev/tnt2
/dev/tnt3

以下代码有效:

import time
import serial

def main():
     vserial0 = serial.Serial(port='/dev/tnt0', baudrate=9600, bytesize=8, parity=serial.PARITY_EVEN, stopbits=1)
     vserial1 = serial.Serial(port='/dev/tnt1', baudrate=9600, bytesize=8, parity=serial.PARITY_EVEN, stopbits=1)

     n_bytes = 0 

     while n_bytes == 0:
          vserial0.write('test')
          n_bytes = vserial1.inWaiting()
          time.sleep(0.05)

     print vserial1.read(n_bytes)

if __name__ == '__main__':
     main()

如果在终端中执行此操作会发生什么:
echo“test”>/dev/tnt0
?它会给我同样的错误
bash:echo:write error:Invalid argument
我正在使用
tty0tty
串行端口来模拟串行端口,因为我的机器没有串行端口…显然,
/dev/tnt0
不是串行设备。仅供参考,串行设备通常有名称
/dev/ttyX
/dev/ttySX
,但不是必需的。有没有一种方法可以像设备一样模拟机器上的串行端口?即使它只是作为一个echo服务器,并在屏幕上打印客户端发送给它的任何内容。。。这应该足以测试我的程序…不确定为什么tty0tty不起作用,但您可以尝试socat:另外,请接受我的回答,因为它回答了您的问题。谢谢您为我节省了几个小时的故障排除时间。使用minicom打开接收端立即解决了问题。请注意,tty0tty在您尝试编写之前一直有效。也就是说,端口是可识别和可打开的,但除非打开接收端口,否则写入操作将始终失败。再次感谢。tnt0到tnt7是模拟端口。。它们可以很好地工作,每个连续的端口对充当连接的空调制解调器。