Tôi đang cố gắng sử dụng mô-đun pexpect (phiên bản 3.3) với Python 3.4.0. Tôi gặp lỗi
TypeError: phải là str, không phải byte
khi tôi gọi phương thức child.expect.
Mã thực tế là ví dụ tiêu chuẩn từ tài liệu pexpect:
child = pexpect.spawn('ssh foo@bar.com')
index = child.expect([pexpect.TIMEOUT, pexpect.EOF, ssh_newkey, '.*password:'])
Chính xác thì mã tương tự hoạt động bình thường với mô-đun pexpect (phiên bản 3.1) và phiên bản Python 2.7.6.
Tài liệu về Pexpect trên GitHub nói rằng pexpect phiên bản 3.3 yêu cầu Python 2.6 hoặc 3.2 trở lên. Có ai biết nếu pexpect không hoạt động với Python 3 vì lý do nào đó mặc dù những gì được nêu trong tài liệu cho mô-đun này?
Đây là đầu ra theo dõi mà tôi nhận được:
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
Ngoài ra, tôi cũng thấy hộp "OpenSSH" mở ra qua GUI trên Ubuntu nhắc nhập mật khẩu khi tôi chạy tập lệnh. Điều này không xảy ra trong Python 2.7.6. Trong Python 2.7, tôi có thể đăng nhập vào hệ thống mà không cần bất kỳ tương tác thủ công nào - mọi thứ diễn ra tự động thông qua tập lệnh.