Seite 1 von 1

subprozess.call()

Verfasst: Samstag 10. August 2019, 14:12
von Dirki
Ich versuche den folgenden Befehl in einen subprozess.call() zu bringen, aber irgendwie will das nicht funktionieren. So sieht der aus:

youtube-dl --output "%(playlist_index)s - %(title)s.%(ext)s" -u admin@email.de -p geheim https://www.url.de/unterverzeichnis

Code: Alles auswählen

#!/usr/bin/python
import subprocess
uname = "admin@email.de"
upw = "geheim"
url = "https://www.url.de/unterverzeichnis"


subprocess.call(["youtube-dl --output \"%(playlist_index)s - %(title)s.%(ext)s\" -u", uname, "-p", upw, url])
Vielleicht mag ja einer von euch mal einen Tipp abgeben.

Danke!

Dirk

Re: subprozess.call()

Verfasst: Samstag 10. August 2019, 15:21
von __deets__
Du mischst Liste mit String als Argument. YouTube-dl, —output etc müssen alles eigene Element der Liste sein. Dann kannst du dir auch das krude escapen sparen.

Re: subprozess.call()

Verfasst: Samstag 10. August 2019, 16:05
von __blackjack__
Und dann bei Gelegenheit mal auf Python 3 umsteigen und `subprocess.run()` verwenden.

Re: subprozess.call()

Verfasst: Samstag 10. August 2019, 20:47
von Dirki
__deets__ hat geschrieben: Samstag 10. August 2019, 15:21 Du mischst Liste mit String als Argument. YouTube-dl, —output etc müssen alles eigene Element der Liste sein. Dann kannst du dir auch das krude escapen sparen.
Danke! Werde das direkt probieren.

@ blackjack
Nutze ich bereits, habe immer trotzdem subprozess.call benutzt. ups! ;)

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 09:21
von Dirki

Code: Alles auswählen

subprocess.run(["/usr/bin/youtube-dl", "--output", "\"%(playlist_index)s", "-", "%(title)s.%(ext)s\"", "-u", uname, "-p", upw, url])
Irgendwie funktioniert es immer noch nicht ganz, wenn auch schon ein bisschen mehr, aber ich weiß echt nicht weiter *grummel*:
ERROR: '-' is not a valid URL. Set --default-search "ytsearch" (or run youtube-dl "ytsearch:-" ) to search YouTube
Vielleicht habt ihr ja noch einen zielführenden Tipp für mich. Danke vielmals! Ohne euch würde ich nicht ein Programm zuende bekommen. ;)

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 09:36
von Sirius3
Was in der Shell in Anführungszeichen steht, ist ein Parameter, den hast Du jetzt in drei zerstückelt.

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 10:20
von Dirki
Dann habe ich wohl den Beitrag von Deets falsch verstanden, in der Shell müssen nur die Anführungszeichen bestehen bleiben, die ich escaped habe.

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 10:26
von Sirius3
Das war gemeint:

Code: Alles auswählen

subprocess.run(["/usr/bin/youtube-dl", "--output", "%(playlist_index)s - %(title)s.%(ext)s", "-u", uname, "-p", upw, url])
›uname‹ sollte besser ›username‹ und ›upw‹ besser ›password‹ heißen, dann muß man nicht rätseln.

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 10:28
von sparrow
Ich würde sagen, da müssen gar keine Anführungszeichen bestehen bleiben. Die werden in der Shell verwendet, um ein Argument zu kennzeichnen. Hier ist ein Argument aber ein Element in der Liste. Da müssen keine Anführungszeichen drumherum. Dafür sorgt dann subprocess. Deshalb ist es ja eine Liste.

Re: subprozess.call()

Verfasst: Montag 12. August 2019, 11:12
von Dirki
Sirius3 hat geschrieben: Montag 12. August 2019, 10:26 Das war gemeint:

Code: Alles auswählen

subprocess.run(["/usr/bin/youtube-dl", "--output", "%(playlist_index)s - %(title)s.%(ext)s", "-u", uname, "-p", upw, url])
›uname‹ sollte besser ›username‹ und ›upw‹ besser ›password‹ heißen, dann muß man nicht rätseln.
Ah! Vielen Dank, wie blöd kann man sich anstellen(self)?

Ihr seid meine Helden des Codes!