Pipe von Gamepad schließen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe mir mal zum rumspielen eines dieser günstigen USB SNES Gamepads gegönnt. Im Prinzip läuft schon alles, nur habe ich ein relativ doofes Problem.

    Ich lese den Input des Gamepads von /dev/input/js0 in meinem Programm mittels

    Code
    pipe = open('/dev/input/js0', 'r')


    aus. Wenn ich nun das Programm beenden möchte, hört das Programm noch auf dem Stream und erst nach einem Tastendruck des Gamepads wird die Pipe mit

    Code
    pipe.close()


    geschlossen.

    Nun würde ich das gerne mit subprocess.Popen verwirklichen, soweit ich das verstanden habe, werden damit selbst solche Pipes ordnungsgemäß geschlossen.
    Ich muss noch dazu sagen, dass ich im weiteren Verlauf des Programms

    Code
    for bit in pipe.read(1):
    			byte.append('%02X' % ord(bit)) 
    ### byte wurde zuvor auf eine leere Liste initialisiert


    verwende, um die Input Bytes der Buttons auszulesen. Es sollte daher idealerweise eine ähnliche Methode wie read() zur Verfügung stehen.

    Ich habe schon folgendes versucht

    Code
    import subprocess
    
    
    pipe = subprocess.Popen(['/dev/input/js0'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = pipe.communicate()[0]
    print('teeeeeeeest:\n\n' + pipe + '\n\n')

    Das bringt folgende Fehlermeldung

    Code
    Traceback (most recent call last):
      File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
        self.run()
      File "/usr/lib/python2.7/threading.py", line 505, in run
        self.__target(*self.__args, **self.__kwargs)
      File "lcd.py", line 170, in get_input
        stdout, stderr = pipe.communicate()[0]
    ValueError: need more than 0 values to unpack

    Könnt ihr mir da auf die Sprünge helfen?

    • Offizieller Beitrag

    Was sagt er denn, wenn du es so machst.

    Code
    stdout, stderr = pipe.communicate()

    Allerdings leitest du "nur" deine Standardausgabe und Fehlermeldungen in Varibalen um.

    Zig doch mal deinen ganzen Code

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (17. April 2015 um 09:25)

  • Ich habe gestern noch ein wenig rumgespielt, bin aber nicht so recht weiter gekommen.

    Hier ist mein originaler Code:

    Im Prinzip würde mir schon eine Lösung reichen, mit der ich die Pipe ordnungsgemäß schließen kann, es muss nicht unbedingt mit subporcess.Popen geregelt werden, wenn es auch einfacher geht ;)

    dbv: Ich werde das gleich noch ohne [0] testen

    Einmal editiert, zuletzt von driftmonster (17. April 2015 um 11:11)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!