Mam ten skrypt python2.7, który działa dobrze na "Raspberry Pi Zero W", emulując mysz na komputerze stacjonarnym i przesuwając mysz o 127 pikseli na północny zachód.

report = '\x00\x81\x81\x00'
with open('/dev/hidg1', 'rb+') as fd:
    fd.write(report)

Teraz wypróbowałem to z pythonem3 i otrzymałem ten błąd

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    fd.write(report)
TypeError: a bytes-like object is required, not 'str'

Znalazłem kilka rozwiązań z fd.write(report.encode()), ale to powoduje przesłanie czegoś innego do komputera stacjonarnego. Nie tylko ruch myszy. Porusza się (nie 127 pikseli) i wykonuje kliknięcie prawym przyciskiem myszy. Nie tego chcę.

1
Jan 20 listopad 2019, 18:50
Myślę, że powinieneś przekazać to bytes obiekt, który nie jest tym samym co str.
 – 
Iguananaut
20 listopad 2019, 18:53
Otwierają uchwyt urządzenia (dla myszy) i przekazują do niego polecenia binarne, więc rb+ jest rzeczywiście odpowiednie.
 – 
Iguananaut
20 listopad 2019, 18:55

1 odpowiedź

Spróbuj - konwertuj report na obiekt bajtów.

report = b'\x00\x81\x81\x00'

To różni się od poprzedniego rozwiązania, które wypróbowałeś -

>>> '\x00\x81\x81\x00'.encode()
b'\x00\xc2\x81\xc2\x81\x00'
2
CDJB 20 listopad 2019, 18:52