Sto cercando di eseguire uno script di base Pexpect:Pexpect e PyCharm - ioctl non appropriato per il dispositivo
import pexpect
ftp_process = pexpect.spawn('ftp')
ftp_process.interact()
Quando il codice viene eseguito direttamente da un terminale, il codice funziona come previsto. Se faccio funzionare il codice utilizzando del PyCharm run/debug ottengo il seguente errore:
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')
Sembra che il modo Pexpect interagisce con finestra di esecuzione/debug di PyCharm non funziona per impostazione predefinita. C'è un modo per porvi rimedio con una specifica impostazione PyCharm? In caso contrario, c'è un altro modo per aggirare questo problema?
EDIT
Il codice di cui sopra è semplicemente un esempio abbreviato che comporta il problema. Le altre capacità di pexpect (come expect()
, sendline()
, ecc.) Sono ancora desiderate.
PyCharm deve fornire una pseudo-tty (pty) anziché una pipe, ad esempio, il codice viene eseguito correttamente all'interno di Emacs. Potresti provare 'pty.spawn ('ftp')' – jfs
@ J.F.Sebastian, che è una risposta, funziona. –
@ J.F.Sebastian: pty funziona per questo caso, ma questo è davvero solo un esempio semplificato. Ho ancora bisogno del potere di pexpect. Non vedo come rendere PyCharm una pseudo-tty, ma forse qualcuno che risponda a questa domanda lo saprà. – golmschenk