Seite 1 von 1

Variable umcodieren

Verfasst: Dienstag 7. November 2017, 19:55
von jake-the-snake
Abend Leute

Es geht um diesen keinen Code:

Code: Alles auswählen

import subprocess

# Terminal-in Variable-Packen
output = subprocess.check_output("lsusb")
print(output)

usbid = output
usbid.find('1234:1234')
Terminalausgabe in Variable packen: ok
zum Test ins Terminal drucken: ok

Meine Vermutungen:
Der Inhalt von output ist ein Byte-Objekt. Er kann nicht an usbid übergeben werden bzw. spätestens bei der Suchaktion ist Schluss.

Fehlermeldung dazu:
[codebox=bash file=Unbenannt.bsh]File "./xyz.py", line 30, in <module>
usbid.find('1234:1234')
TypeError: a bytes-like object is required, not 'str'
[/code]
String-Behandlung auf Byte-Objekt nicht möglich. Ich habe recherchiert und decode / encode gefunden.
Für meine Zwecke - also Byte-Objekt in String utf8 bräuchte ich den Befehl "decode" <- Richtig?
Außerdem habe ich hier Python3 am Start - da braucht man utf8 gar nicht angeben? <- Richtig?

Wie schreibe ich den die Variable output als String in die Variable usbid?

Gruss jts

Re: Variable umcodieren

Verfasst: Dienstag 7. November 2017, 21:48
von jake-the-snake
Abend Forum

Das umcodieren hat geklappt:

Code: Alles auswählen

# Byte-Werte umwandeln in String-Werte
output = output.decode('utf8')
print (output)
In der angesammelten "Datenflut" der USB-Geräte, suche ich nach einer Serien-Nummer eines spezifischen USB-Sticks:

Code: Alles auswählen

usbid = output
usbid = usbid.find('054c:019e')
print (usbid)
So, jetzt kommt es:
Ist der USB-Stick mit der Seriennummer 054c:019e ausgesteckt, liefert mir der Print Befehl "-1" - das ist gut so.
Ist der USB-Stick mit der Seriennummer 054c:019e eingesteckt, wird der Wert "123" ausgedruckt - Warum?
Müsste die Variable usbid nicht die in der Zeichenkette gefundene Seriennummer "054c:019e" enthalten?

Gruß jts

Re: Variable umcodieren

Verfasst: Dienstag 7. November 2017, 22:20
von Sirius3
@jake-the-snake: solche Fragen lassen sich ganz leicht beantworten, wenn man die Dokumentation zu `find` durchliest.

Re: Variable umcodieren

Verfasst: Mittwoch 8. November 2017, 06:20
von snafu
jake-the-snake hat geschrieben:Meine Vermutungen:
Der Inhalt von output ist ein Byte-Objekt.
Welche Art von Objekt das ist, findest du mittels type(output) heraus.
jake-the-snake hat geschrieben:Er kann nicht an usbid übergeben werden bzw. spätestens bei der Suchaktion ist Schluss.
Auch Byte-Objekte können an Namen gebunden werden.
jake-the-snake hat geschrieben:Fehlermeldung dazu:
[codebox=bash file=Unbenannt.bsh]File "./xyz.py", line 30, in <module>
usbid.find('1234:1234')
TypeError: a bytes-like object is required, not 'str'
[/code]
Das verstehst du anscheind falsch herum: Das Problem ist nicht, dass usbfind ein Byte-Objekt ist, sondern dass das übergebene Argument von find() ein String ist. Denn die find()-Methode von Byte-Objekten arbeitet nur mit Bytes als Parameter.

Die Byte-Thematik ist also lösbar mittels:

Code: Alles auswählen

usbid.find(b'1234:1234')
...dann sparst du dir das Umkodieren.