Main Tutorials

Python 3 TypeError: ‘str’ does not support the buffer interface

Review a Python 2 socket example

whois.py

import sys
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.arin.net", 43))
s.send(sys.argv[1] + "\r\n")

#Python 2.7 send signature
#socket.send(string[, flags])

If compile with Python 3, it prompts the following error?


Traceback (most recent call last):
  File "C:\repos\hc\whois\python\whois.py", line 6, in <module>
    s.send(sys.argv[1] + "\r\n")
TypeError: 'str' does not support the buffer interface

Solution

In Python 3, the socket accepts bytes, you need to convert string to bytes with a encode() function like this :

whois.py

import sys
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.arin.net", 43))

#convert string to bytes
s.send((sys.argv[1] + "\r\n").encode())

#Python 3.4 send signature
#socket.send(bytes[, flags])

P.S Tested with Python 3.4.3

References

  1. Python 3 socket send documentation
  2. Python 2 socket send documentation
  3. Python Whois client example

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments