【发布时间】:2015-10-30 00:40:21
【问题描述】:
我正在尝试运行一个基本的 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() 等)仍然需要。
【问题讨论】:
-
PyCharm 必须提供伪 tty (pty) 而不是管道,例如,代码在 Emacs 中运行良好。你可以试试
pty.spawn('ftp') -
@J.F.Sebastian,这是一个答案,它有效。
-
@J.F.Sebastian:pty 适用于这种情况,但这实际上只是一个简化的示例。我仍然需要 pexpect 的力量。我不知道如何让 PyCharm 提供伪 tty,但也许回答这个问题的人会知道。
-
试试
pty.spawn("python your_script.py".split()),其中your_script.py使用pexpect。 -
@J.F.Sebastian:这确实有效。它不是特别干净(与更改 IDE 等中可能存在的某些设置相比),但我会看看它是否是我得到的唯一可行的解决方案。
标签: python python-3.x pycharm pexpect