Frage zu Python und youtube-dl



  • Moin, ich habe ein Python-(Skript) geschrieben, mit dem man die URL oder video id angeben kann und das dann herunterlädt und konvertiert.
    Jetzt möchte ich euch Python-Experten fragen, ob man noch etwas verbessern könnte oder etwas vermeiden sollte:

    import subprocess
    name1 = ''
    name2 = ''
    while True:
        print('Bitte URL oder Video-ID:')
        name1 = raw_input()
        if not name1:
            break
        if len(name1) <= 32:
            name1 = 'https://www.youtube.com/watch?v=' + name1;
        name2 = name1[name1.rfind('/') + 9:].lower()
        print(name1)
        print(name2)
        subprocess.call(['youtube-dl', '-f', 'bestaudio', '-o', '/home/usern/Desktop/Music/' + name2, name1])
        subprocess.call(['ffmpeg', '-i', '/home/usern/Desktop/Music/' + name2, '/home/usern/Desktop/Music/' + name2 + '.mp3'])
    
    

    Freue mich über jede Kritik.


  • Mod

    Es sind 15 Zeilen Simpelscript für einen ganz speziellen, persönlichen Anwendungsfall. Was soll man da groß kritisieren? Durch ein Code-Review würde das offensichtlich nicht kommen, aber wiederverwertbarer, wartbarer Code ist hier nicht das Ziel gewesen (hoffe ich).



  • @SeppJ sagte in Frage zu Python und youtube-dl:

    Durch ein Code-Review würde das offensichtlich nicht kommen

    Aha, und weswegen?



  • lies den rest des satzes?


  • Mod

    • Unübliche Usability für ein Shellscript. Siehe: Unix-Philosophie.
    • Python 2 in 2020? https://pythonclock.org/
      • Da aber die print-Funktion genutzt wird, ist dem Autor vermutlich nicht einmal klar, dass es raw_input in Python 3 nicht gibt
    • Alles hardcoded, so dass es nur bei dir persönlich funktioniert.
    • Schlechtes, manuelles Pfadparsing anstatt die fertigen, korrekten Funktionen dafür zu nutzen
    • Das gesamte Script ist unnötig, da es eigentlich nur auf der Unkenntnis von Pipes beruht. Eigentlich ist das ein Einzeiler auf der Kommandozeile.
      • Das merkt man schon daran, dass alles, was wirklich getan wird, ein paar subprocess Calls sind. Wozu der Overkill eines Pythonscripts, das eigentlich nichts tut?
    • Gesamter Code ist eher unelegant.
      • Wozu Zeilen 2+3? Der Autor versteht den eigenen Programmablauf nicht.
      • While True break loop mit einzelner Ausstiegsbedingung, die auch noch direkt zu Beginn geprüft wird. Typisches Noobpattern. Da hätte leicht eine klarere Abbruchbedingung formuliert werden können.
      • Bröselige Logik in Zeile 9. Es soll wohl geprüft werden, ob eine URL oder eine Video-ID eingegeben wurde, aber die Prüfung ist indirekt und beruht auf Annahmen, die bestimmt gar nicht genau überprüft wurden.
      • Zeile 11: siehe oben
      • Offensichtliche Debugausgaben im fertigen Programm, noch dazu mit print auf stdout.
      • Keine Prüfung, ob Zeile 14 Erfolg hatte, bevor die darauf aufbauende Zeile 15 passiert


  • @SeppJ sagte in Frage zu Python und youtube-dl:

    Das gesamte Script ist unnötig, da es eigentlich nur auf der Unkenntnis von Pipes beruht. Eigentlich ist das ein Einzeiler auf der Kommandozeile.

    Das ist doch Blödsinn. Belege deine Hypothese mit einem einfachen Bash-Script, welches genau das tut. Wenn du das nicht kannst, ist Python auch nicht unangebracht.

    Der Rest stimmt teilweise, allerdings soll das keine modulare (also allgemeine) Lösung sein. So kann ich nicht annehmen, in welchen Ordner was heruntergeladen werden soll.

    @Swordfish Wie wär's dich mal ein bisschen zurückzulegen?



  • Ach so, while true if break, finde ich persönlich übersichtlicher, ich hab dazu im Netz auch nie wirklich Gegenargumente gefunden, außer "soll man nicht", was kein wirkliches Argument wäre.



  • @EinNutzer0

    Das ist doch Blödsinn. Belege deine Hypothese mit einem einfachen Bash-Script, welches genau das tut. Wenn du das nicht kannst, ist Python auch nicht unangebracht.

    Gegenfrage: Warum sollte es in Bash nicht funktionieren?


  • Mod

    @EinNutzer0 sagte in Frage zu Python und youtube-dl:

    Der Rest stimmt teilweise, allerdings soll das keine modulare (also allgemeine) Lösung sein.

    Du bist ein Scherzkeks.

    Erste Antwort: Das ist offensichtlich ein Spielprogramm und braucht kein Codereview, weil das nicht modular oder wiederverwendbar sein soll.
    Du: Bitte gib mir doch ein Review!
    <Review passiert>
    Du: Das Review ist doof! Das soll doch nur ein Spielprogramm sein, das nicht modular oder wiederverwendbar sein soll!

    Wenn du immer so aufmerksam mitliest und logisch mitdenkst, ist das kein Wunder, dass deine Programme so aussehen, wie sie aussehen 🙄



  • @EinNutzer0 sagte in Frage zu Python und youtube-dl:

    Freue mich über jede Kritik.

    @EinNutzer0 sagte in Frage zu Python und youtube-dl:

    Das ist doch Blödsinn.

    ein Witz, oder?


Log in to reply