subprozess.call()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und dann bei Gelegenheit mal auf Python 3 umsteigen und `subprocess.run()` verwenden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

__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! ;)
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

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. ;)
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Was in der Shell in Anführungszeichen steht, ist ein Parameter, den hast Du jetzt in drei zerstückelt.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

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.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

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.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

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!
Antworten