2017-04-17 6 views
-1

ich ein kompletter Neuling in Python bin, aber ich habe für Spaß worden Programmierung in (Liberty-) Grunde seit etwa 1980andere Typeerror: ein Byte-ähnliches Objekt erforderlich ist, nicht ‚str‘

Python 3.5.2 ich teste dieses Skript:

import time, telnetlib 

host = "dxc.ve7cc.net" 
port = 23 
timeout = 9999 

try: 
    session = telnetlib.Telnet(host, port, timeout) 
except socket.timeout: 
    print ("socket timeout") 
else: 
    session.read_until("login: ") 
    session.write("on0xxx\n") 
    output = session.read_some() 
    while output: 
     print (output) 
     time.sleep(0.1) # let the buffer fill up a bit 
     output = session.read_some() 

kann mir jemand sagen, warum ich die Typeerror bekommen: ein Byte-ähnlichen Objekt erforderlich ist, nicht ‚str‘ und wie kann ich es lösen?

+0

Mögliches Duplikat von [TypeError: ein Byte-ähnliches Objekt ist erforderlich, nicht 'str'] (http://stackoverflow.com/questions/33003498/typeerror-a-bytes-like-object-is-required-not -str) –

Antwort

0

In Python 3 (aber nicht in Python 2), str and bytes are distinct types, die nicht gemischt werden können. Sie können str nicht direkt in einen Socket schreiben; Sie müssen bytes verwenden. Setzen Sie das Zeichenfolgenliteral einfach mit b voran, um es zu einem bytes Literal zu machen.

session.write(b"on0xxx\n") 
+0

das ist was ich brauchte, danke! Ich musste auch das 'b' hier hinzufügen: session.write (b "on0xxx \ n") – ON5MF

0

Anders als in Python 2.x, wo Sie die Daten nicht durch das Netz geschickt kodieren müssen, müssen Sie in Python 3.x Alles, was Sie senden möchten, muss mit der .encode() - Funktion codiert werden. Alles, was Sie erhalten, muss mit .decode() dekodiert werden.

Verwandte Themen