Pexpect и PyCharm - Несоответствующий ioctl для устройства
Я пытаюсь запустить базовый Pexpect script:
import pexpect
ftp_process = pexpect.spawn('ftp')
ftp_process.interact()
Когда код запускается непосредственно с терминала, код работает так, как ожидалось. Если я запустил код с помощью PyCharm run/debug, я получаю следующую ошибку:
Traceback (most recent call last):
File "/path/to/code/test.py", line 3, in <module>
ftp_process.interact()
File "/usr/local/lib/python3.4/site-packages/pexpect/__init__.py", line 1645, in interact
mode = tty.tcgetattr(self.STDIN_FILENO)
termios.error: (25, 'Inappropriate ioctl for device')
Кажется, что взаимодействие Pexpect с окном запуска/отладки PyCharm не работает по умолчанию. Есть ли способ исправить это с помощью определенной настройки PyCharm? Если нет, есть ли другой способ обойти это?
ИЗМЕНИТЬ
Приведенный выше код - это просто сокращенный пример, который приводит к проблеме. Остальные возможности pexpect (такие как expect()
, sendline()
и т.д.) По-прежнему желательны.
Ответы
Ответ 1
Примечание. Это только обходной путь, но он работает.
Если script вызывается из псевдо-tty с помощью отдельного script, то желаемые результаты могут быть достигнуты. Например, используя pty.spawn("python my_script.py".split())
, где my_script.py используется с помощью pexpect
.
Я счел разумным иметь один script, который сначала пытается вызвать вызовы pexpect
в пределах try/except
, и после обнаружения ошибки, script напомнит себя внутри псевдо-tty.
Кредит принадлежит Ю.Ф. Себастьяну в комментариях к исходному вопросу.
Ответ 2
Попробуйте что-то, что можно выделить Pseudo TTYs. Это должно трюк ftp
в мысли, что у него есть TTY (что-то, что дается при запуске Python REPL с терминала). Пример:
pexpect.pty.spawn('ftp')
Вы также можете попробовать ptyprocess, хотя я не могу ручаться за правильность/находиться в рабочем состоянии.
Ответ 3
Похоже, что pexpect установлен правильно на вашей установке Python по умолчанию, может быть другой экземпляр python, у которого может быть установлена или установлена некорректная библиотека pexpect. В настройках PyCharm попробуйте указать его по умолчанию/правильную установку python.