Seite 1 von 1

Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 11:06
von djevil
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

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 11:13
von 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.

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 12:06
von djevil
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

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 12:50
von djevil
@BlackJack:
Du willst keine Zeichenketten ausführen!
Ja, weiss nicht, ich will halt das Argument als Variable ausführen..

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 12:53
von Sirius3
@djevil: was ist keycode? Und warum stehen da nicht schon die KEY-Konstanten sondern nur die Namen als Strings drin?

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 12:59
von djevil
ich habe halt die Tasten mit einem dict auf die uinput codes gemappt,

Code: Alles auswählen

keycode = {
    23 : "KEY_1",

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 13:18
von Sirius3
@djevil: direkter wäre

Code: Alles auswählen

keycode = {
    23: uinput.KEY_1,
}

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 17:37
von djevil
Dann gibt mir:

Code: Alles auswählen

keycode[23]
ein Tupel: (1,2) zurück
wie bekomme ich den Wert
uinput.KEY_1
?

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 17:54
von Sirius3
@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.

Re: Widerspenstiger String

Verfasst: Dienstag 6. Dezember 2016, 19:08
von djevil
Tatsächlich ;)

Mfg d