Widerspenstiger String

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Moin,

Ich versuche hier schon eine ganze Weile, einen String auszuführen:

Code: Alles auswählen

        key1 = data[26] ## int
        print(key1)
        key2 = keycode[key1] ## int
        print(key2)
        key3 = "uinput." + str(key2)
        print(key3)
        device.emit_click(key3)
print(key3) gibt:

Code: Alles auswählen

uinput.KEY_X
und ausgeführt werden soll:

Code: Alles auswählen

device.emit_click(uinput.KEY_X)
Also es sieht zumindest richtig aus, auch wenn sicher sehr umständlich, aber warum funktioniert es aber dennoch nicht?

Mfg
d
BlackJack

@djevil: Du willst keine Zeichenketten ausführen!

Die erste Frage ist warum `key2` den Wert 'KEY_X' hat, wo der Kommentar doch ``## int`` verspricht‽ Wie kommt `keycode` zustande und warum steht da ein Name und nicht schon der Wert, den Du eigentlich haben willst?

Ansonsten suchst Du die `getattr()`-Funktion um vom `uinput`-Objekt das Attribut abzufragen dessen Name an `key2` gebunden ist.
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

O, sorry, key2 ist schon string

Code: Alles auswählen

key1 = data[26] ## int
        print(key1)
        key2 = "uinput."+keycode[key1] ##    key1= int, str keycode from dict
        print(key2)
        device.emit_click(key2)
        print(getattr(uinput, "KEY_5"))
        
Ausgabe
>> (1, 6) ## KEY_5 = (0x01, 6) lt. Definition
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

@BlackJack:
Du willst keine Zeichenketten ausführen!
Ja, weiss nicht, ich will halt das Argument als Variable ausführen..
Zuletzt geändert von djevil am Dienstag 6. Dezember 2016, 12:56, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@djevil: was ist keycode? Und warum stehen da nicht schon die KEY-Konstanten sondern nur die Namen als Strings drin?
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

ich habe halt die Tasten mit einem dict auf die uinput codes gemappt,

Code: Alles auswählen

keycode = {
    23 : "KEY_1",
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@djevil: direkter wäre

Code: Alles auswählen

keycode = {
    23: uinput.KEY_1,
}
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Dann gibt mir:

Code: Alles auswählen

keycode[23]
ein Tupel: (1,2) zurück
wie bekomme ich den Wert
uinput.KEY_1
?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@djevil: der Wert von uinput.KEY_1 ist ein Tuple: (1, 2). Den Wert »uinput.KEY_1« gibt es nicht. Den brauchst Du ja auch nirgends.
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Tatsächlich ;)

Mfg d
Antworten