модуль pty - «os.read» мастера читает то, что было только что написано мастеру - PullRequest
2 голосов
/ 15 марта 2019

ОБНОВЛЕНИЕ: Это было решено. 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 представляет собой пару устройств

...