2016-07-30 33 views
1

Das ist mein Befehlin Python mit mehreren Werten und gleichem Argumente verwendet subprocess

subprocess.call(["wine","MP4Box.exe","-add",outputdir+"tmp.m4a","-itags",'name=a',"-itags", "artist=b","-itags", "album_artist=c","-itags", "album=d","-itags", "created=2034","-itags", "genre=e","-new", "tmp23.m4a"]) 

In der Ausgabedatei i nur Genre bekommen kann, sendet subprocess nur die letzten „-itags“ value.Anyway diese Arbeit zu machen ? [: Tag2]

dank

+0

'subprocess.call' filtert nicht - es erstellt lediglich eine Zeichenkette, die von der Shell ausgeführt werden kann. Versuchen Sie, den Befehl in einer Shell normal auszuführen, Sie erhalten das gleiche Ergebnis. Sobald Sie es in einer Shell ausführen können, reparieren Sie Ihre 'subprocess.call' entsprechend. (zB: Lesen Sie die Dokumentation für MP4Box und sehen Sie sich an, wie sie die oben genannten Argumente verarbeitet.) –

Antwort

0

Nach ihrer documentation der Parameter sollte wie folgt

-itags tag1 weitergegeben

So kann man es versuchen, wie dies zu tun

subprocess.call(["wine","MP4Box.exe","-add",outputdir+"tmp.m4a","-itags","name=a:artist=b" ... 
1
outputdir = "output" 

subprocess.call([ 
    "wine", "MP4Box.exe", "-add", outputdir + "/tmp.m4a", 
    "-itags", "name={name}:artist={artist}:album_artist={album_artist}:album={album}:created={created}:genre={genre}".format(
     name="a", 
     artist="b", 
     album_artist="c", 
     album="d", 
     created=2034, 
     genre="e" 
    ), 
    "-new", "tmp23.m4a" 
]) 

Von der docs.

Beachten Sie, dass die Tags das Zeichen : nicht enthalten können, da dies den Befehl unterbricht.

+0

Jeder Grund, warum Sie hier eine Formatierung der Zeichenfolgen vorschlagen ? Die Verwendung einer Liste von Argumenten ist der richtige Weg, da es die Argumente korrekt entkoppelt, so dass es keine Probleme in der Shell verursacht ... Denk an ein outputdir mit einem Leerzeichen darin etc ... –

+0

@JonClements dachte ich nicht davon werde ich es korrigieren. –

+0

Schön ... du könntest auch das '** {' entpacken für das dict entfernen und einfach '.format (name = 'a', artist = 'b')' etc ... verwenden, aber funktional wäre es das gleich ... –