Python PySerial客户端无法写入数据
我正试图编写一个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
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是模拟端口。。它们可以很好地工作,每个连续的端口对充当连接的空调制解调器。