Python 3 TypeError: ‘str’はバッファインタフェースをサポートしていません
Python 2ソケットの例を見直す
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])
Python 3でコンパイルすると、次のエラーメッセージが表示されますか?
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
解決策
Python 3では、ソケットがバイトを受け入れるため、文字列を次のように `encode()`関数でバイトに変換する必要があります:
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 Python 3.4.3
でテスト済み
参考文献
3ソケットはドキュメントを送る]。
https://docs.python.org/2.7/library/socket.html#socket.socket.send
[Python
2ソケットのドキュメントを送信]。リンク://python/python-whois-client-example/[Python Whois client
例]