我正在尝试运行基本的Pexpect脚本:

import pexpect
ftp_process = pexpect.spawn('ftp')
ftp_process.interact()

当直接从终端运行代码时,代码将按预期工作。如果我使用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')

在默认情况下,Pexpect与PyCharm的运行/调试窗口交互的方式似乎不起作用。是否有某种方法可以通过特定的PyCharm设置对此进行补救?如果没有,还有其他解决方法吗?

编辑

上面的代码只是导致问题的简化示例。仍然需要其他pexpect功能(例如expect()sendline()等)。

最佳答案

注意:这仅是一种解决方法,但它确实起作用。

如果通过使用单独的脚本从伪tty中调用该脚本,则可以实现所需的结果。例如,使用pty.spawn("python my_script.py".split()),其中my_script.py是使用pexpect的那个。

我发现有一个脚本可以在pexpect内最初尝试try/except调用,并在捕获错误后让该脚本在伪tty内重新调用,这是合理的。

最初的问题在评论中归功于塞巴斯蒂安·J·F。

关于python - Pexpect和PyCharm-设备的不合适的ioctl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31862983/

10-12 21:47