python-cec, try/catch, dauerschleife

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich arbeite im Moment an einem kleinen Script das auf meinem Ambilight-Pi die TV-Fernbedienung ausliest, dazu nutze ich python-cec.

    Der Hauptbestandteil des Scripts ist eine Dauerschleife die abfragt ob der TV an ist oder nicht.

    Jetzt läuft der code solange der TV an ist ohne Probleme. Sobald der TV aus ist schlägt "d.is_on()" jedoch fehl und das script wird beendet. Wie umgehe ich das ganze ala "try/catch"? Also versuchen, bei fehlschlag einfach erneut versuchen usw...


    Gruß und danke im Vorraus

    Tim

    It just works? Make it better, break it. Rebuild it, better!

    Einmal editiert, zuletzt von timkn (11. März 2015 um 21:35)

  • Oh, hab eine zeile vergessen zu kopieren :/


    "d = cec.Device(0)"


    habe es oben auch mal eingefügt

    It just works? Make it better, break it. Rebuild it, better!

    Einmal editiert, zuletzt von timkn (11. März 2015 um 21:38)

  • Das if(list_devices()) war ein verzweifelter versuch den absturz durch das fehlschlagen von is_on() zu verhindern, das wenn der TV im CEC netz nicht da ist er erst garnicht nachfragt ob der TV, der ja nicht da ist, an ist. hat aber nichts geholfen...

    It just works? Make it better, break it. Rebuild it, better!

  • Es dauert immer ein wenig bis der TV ganz abschaltet, daher musste ich grade auf die Ausgabe warten.

    Code
    Traceback (most recent call last):
      File "remo.py", line 102, in <module>
        if(d.is_on()):
    IOError: Power status not found

    It just works? Make it better, break it. Rebuild it, better!

    • Offizieller Beitrag

    ok, danke
    [code=php]
    while True:
    try:
    if(d.is_on()):
    if(running == 0):
    start = 'sudo /etc/init.d/hyperion start'
    os.system(start)
    running = 1
    except IOError:
    if(running == 1):
    black = 'hyperion-remote -c black'
    stop = 'sudo /etc/init.d/hyperion stop'
    os.system(black)
    os.system(stop)
    running = 0
    else:
    pass[/php]

  • Danke, hab das ganze noch ein wenig abgewandelt um auch auf ein "False" von is_on() zu reagieren und damit schneller auszuschalten.

    It just works? Make it better, break it. Rebuild it, better!

Jetzt mitmachen!

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