MPD/MPC Print zeigt richtigen Code an, aber mit os.system funktioniert es nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • [font="Arial"]Hallo,[/font]

    [font="Arial"]ich hab dieses Problem schon in "Multimedia" geschildert in meinem Projekt MP3-Player (CarPC)[/font]

    [font="Arial"]und zwar habe ich meine Playlisten erstellt (Jede Playlist ein Album) und dann die Playlist-Dateien in eine Liste (Liste.pla) eingefügt und lese die im Array "playl" ein.. [/font]

    [font="Arial"]So jetzt funzt alles, bis ich auf w oder s drücke, um die Playliste zu ändern (msp load *playlist)[/font]
    [font="Arial"]hier zeigt er kurz an, dass er keine Playlist mit dem Namen finden kann.[/font]

    [font="Arial"]ich habe auch den Print-befehl für den Code "mpc load " + playl[x])" (print [font="Arial"]mpc load " + playl[x]))[/font] eingetragen. Und er spuckt auch alles richtig aus. Ich habe auch versucht, dass ich den ausgegebenen Befehl einfach kopiere und in den Shell eintrage - hier funktioinierts.[/font]

    [font="Arial"]Jetzt ist meine Frage, woran es hängt.[/font]


    Gruß Chris

    Einmal editiert, zuletzt von Pfutz (10. November 2013 um 20:08)

  • MPD/MPC Print zeigt richtigen Code an, aber mit os.system funktioniert es nicht? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Wenn ich nicht wüsste das das python sein soll, hätte ich gesagt das es C ist (is das gruselig zu lesen ;) ).
    funktioniert eventuell

    Code
    os.system("mpc load %s" % playl[x])

    ?

    Schau dir mal das subprocess modul an, das ist deutlich flexibler und mächtiger als os.system()

  • Danke für die schnelle Antwort. Dein Vorschlag hat aber leider nicht funktioniert.

    Ich habe mir jetzt mal Subprocess angeschaut und versucht, es zu verwenden, aber es kommt nur ein Fehler:

    subprocess.call("mpc load " % playl[x])

    -> subprocess is not defined

    Gruß Chris

    OK =) hab jetzt "import Subprocess" mit reingemacht, jedoch kommt der Fehler:

    TypeError: not all arguments convertered during string formating

    Einmal editiert, zuletzt von Pfutz (10. November 2013 um 20:53)

    • Offizieller Beitrag
    Code
    import subpocess
    play =subprocess.Popen(
            ["mpc", "load", playl[x]],
            stdout = subprocess.PIPE,
            stderr = subprocess.PIPE
            )
        out, error = play.communicate()

    Somit hast du in den Variablen out, das was die Konsole normalerweise ausgeben würde und in error eventuelle Fehlermeldungen

  • Also ich habs jetzt so, da "out, error = play.communicate()" einen Fehler verursachte.
    Jedoch kommt der selbe Fehler wieder (Not all of arguments converted during string formatting)


    • Offizieller Beitrag
    Code
    subprocess.call("mpc load " % playl[x])

    das kann nicht funktionieren ;).
    wenn dann muss das muss das die Synatx so sein

    Code
    ("mpc load %s" % playl[x])

    Das andere muss aber funktionieren, probier es mal so:

    Code
    subprocess.Popen(["mpc", "load", playl[x]])
  • Ich habe gerade ein kleineres Skript geschrieben, in dem ich leichter ausprobieren kann:

    import os
    import sys
    import subprocess
    x=1
    playl = open("Liste.pla").readlines()
    play = "mpc","load",playl[x]
    subprocess.call(play)

    Habe jetzt alles mögliche Probiert subprocess.Popen zeigt an, dass es kein Modul mit diesen Namen gibt (auch nach Import Popen -> Modul nicht gefunden)

    Das Skript zeigt nur noch den Fehler an [error: Missing closing '"']. Aber nicht, dass es keine Datei gefunden hat. Jedoch wird die Playliste nicht geladen... =(



  • Eventuell, dass er noch Leerzeichen und Absätze mit rein bringt ?

    Einmal editiert, zuletzt von Pfutz (11. November 2013 um 11:49)

    • Offizieller Beitrag

    Sind in echt auch Leerzeilen mit drinne?

  • Danke, aber er bringt folgenden Fehler:

    File "Test.py", line 9
    out, error = play.communicate()
    ^
    SyntaxError: invalid syntax

    Ich habe jetzt nochmal mein altes Skript probiert:

    Die letzte Playlist (anscheinend ohne Absatz) funktioniert...

    Aber in Liste.pla steht alles untereinander ...

    Einmal editiert, zuletzt von Pfutz (11. November 2013 um 11:57)

  • Ergibt leider nur

    Code
    Traceback (most recent call last):
      File "MP.py", line 6, in <module>
        play = "mpc","load",playl[x.strip()]
    AttributeError: 'int' object has no attribute 'strip'



    Es geht =)

    Danke nochmals

    hab die Länge rausgeholt und dann den String schreiben bis zu Länge - 2

    Danke für deine Bemühungen =)

    Einmal editiert, zuletzt von Pfutz (11. November 2013 um 13:01)

Jetzt mitmachen!

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