Пропустить stdin и stderr ребенка с pexpect - PullRequest
1 голос
/ 18 апреля 2011

Я управляю дочерним процессом, используя pexpect (потому что subprocess не поддерживает pty's , и я захожу в тупик с двумя каналами). Процесс создает большой вывод на stderr, который мне не интересен, и, очевидно, pexpect также возвращает все, что я пишу, на stdin:

>>> import pexpect
>>> p = pexpect.spawn('rev')
>>> p.sendline('Hello!')
7
>>> p.readline()
'Hello!\r\n'
>>> p.readline()
'!olleH\r\n'

Как я могу отключить это?

1 Ответ

3 голосов
/ 18 апреля 2011

Использование pty - это не то же самое, что труба.Если вы не включите режим raw, драйвер tty отобразит символы и выполнит редактирование других строк.Таким образом, чтобы получить чистый путь к данным, вам также нужно перевести pty / tty в сырой режим.

Поскольку вы сейчас работаете с псевдоустройством, у вас есть только один поток ввода-вывода.Там нет никакого различия между stdout и stderr (это соглашение о пространстве пользователя).Таким образом, вы всегда будете видеть смешанные stdout и stderr при использовании pty / tty.

...