Je suis en train d'exécuter un script pexpect de base:pexpect et PyCharm - ioctl pour le dispositif inapproprié
import pexpect
ftp_process = pexpect.spawn('ftp')
ftp_process.interact()
Lorsque le code est exécuté directement à partir d'un terminal, le code fonctionne comme prévu. Si je lance le code à l'aide run/debug je reçois l'erreur suivante de PyCharm:
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')
Il semble que la façon dont pexpect interagit avec l'exécution/la fenêtre de débogage de PyCharm ne fonctionne pas par défaut. Y at-il un moyen de remédier à cela avec un paramètre PyCharm spécifique? Sinon, existe-t-il un autre moyen de contourner ce problème?
EDIT
Le code ci-dessus est simplement un exemple raccourci qui se traduit par le problème. Les autres capacités de pexpect (telles que expect()
, sendline()
, etc.) sont encore souhaitées.
PyCharm doit fournir un pseudo-tty (pty) au lieu d'un canal, par exemple, le code s'exécute correctement depuis Emacs. Vous pouvez essayer 'pty.spawn ('ftp')' – jfs
@ J.F.Sebastian, c'est une réponse, ça marche. –
@ J.F.Sebastian: pty fonctionne pour ce cas, mais ce n'est vraiment qu'un exemple simplifié. J'ai toujours besoin du pouvoir de pexpect. Je ne vois pas comment faire pour que PyCharm fournisse un pseudo-tty, mais peut-être quelqu'un qui répondra à cette question saura-t-il. – golmschenk