Helpex - Trao đổi & giúp đỡ Đăng nhập
5

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.

5 hữu ích 3 bình luận 2.7k xem chia sẻ
4

Từ tài liệu :

# In Python 3, spawnu should be used to give str to stdout:
child = pexpect.spawnu('some_command')
child.logfile = sys.stdout
4 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python python-3.x pexpect , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading