ОБНОВЛЕНИЕ: Это было решено. pty инициализирует псевдоустройства в каноническом режиме, эхо должно быть отключено. См. этот ответ .
следующие проходы юнит-теста:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
ser = serial.Serial(devName, baudrate=38400, timeout=1)
test_str = b'testing'
os.write(mfd, test_str)
time.sleep(1)
self.assertEqual(ser.readline(), test_str)
Показывает, что байты, записанные в ведущее псевдоустройство, считываются на подчиненном псевдоустройстве.
Однако, если я переключу порядок двух операторов:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
test_str = b'testing'
os.write(mfd, test_str) # Write first
ser = serial.Serial(devName, baudrate=38400, timeout=1) # Then set up serial
time.sleep(1)
self.assertEqual(ser.readline(), test_str)
Тогда это не удается. ser.readline()
читает ноль байтов.
Я заметил, что также проходит следующее:
def test_pty(self):
mfd, sfd = pty.openpty()
pty.tty.B38400
devName = os.ttyname(sfd)
test_str = b'testing'
os.write(mfd, test_str) # Write to master
self.assertTrue(test_str, os.read(mfd, len(test_str)) # Read from master
По сути, если я os.write
на ведущем устройстве до Я установил последовательное соединение с ведомым устройством, то байты выводятся / записываются (?) На главном псевдотерминале вместо раба
Пожалуйста, помогите мне понять, почему это так.
(Python 3.4.8)
EDIT:
заменил pty
на pseudo-device
, так как pty
представляет собой пару устройств