我正在尝试将 pexpect 模块(版本 3.3)与 Python 3.4.0 一起使用。我收到一个错误
类型错误:必须是 str,而不是 bytes
当我调用 child.expect 方法时。
实际代码是 pexpect 文档中的标准示例:
child = pexpect.spawn('ssh [email protected] /cdn-cgi/l/email-protection')
index = child.expect([pexpect.TIMEOUT, pexpect.EOF, ssh_newkey, '.*password:'])
完全相同的代码可以在 pexpect 模块(版本 3.1)和 Python 版本 2.7.6 中正常工作。
GitHub 上的 Pexpect 文档指出,pexpect 3.3 版本需要 Python 2.6 或 3.2 或更高版本。有谁知道 pexpect 是否由于某种原因无法与 Python 3 一起使用,尽管该模块的文档中有说明?
这是我得到的回溯输出:
Traceback (most recent call last):
File "/home/sambo9/python/python3-pexpect.py", line 17, in <module>
main()
File "/home/sambo9/python/python3-pexpect.py", line 13, in main
child.expect('.*password:')
File "/usr/local/lib/python3.4/dist-packages/pexpect/__init__.py", line 1451, in expect
timeout, searchwindowsize)
File "/usr/local/lib/python3.4/dist-packages/pexpect/__init__.py", line 1466, in expect_list
timeout, searchwindowsize)
File "/usr/local/lib/python3.4/dist-packages/pexpect/__init__.py", line 1535, in expect_loop
c = self.read_nonblocking(self.maxread, timeout)
File "/usr/local/lib/python3.4/dist-packages/pexpect/__init__.py", line 985, in read_nonblocking
self._log(s, 'read')
File "/usr/local/lib/python3.4/dist-packages/pexpect/__init__.py", line 908, in _log
second_log.write(s)
File "/usr/lib/python3.4/idlelib/PyShell.py", line 1339, in write
raise TypeError('must be str, not ' + type(s).__name__)
TypeError: must be str, not bytes
此外,当我运行脚本时,我还看到在 Ubuntu 上通过 GUI 弹出“OpenSSH”框,提示输入密码。在 Python 2.7.6 下不会发生这种情况。在 Python 2.7 中,我可以登录系统而无需任何手动交互 - 一切都通过脚本自动发生。