Es soll beim Aufruf eines Skriptes möglich sein, unterschiedlich viele Argumente anzugeben. Diese sollen nacheinander auf die immer gleiche Weise abgearbeitet werden (Öffnen der angegebenen URL). Wie kann ich das am besten umsetzen? Mit einem Argument ist es mir klar, aber was wenn ich vorher nicht weiß wieviele Argumente mitgegeben werden?
Python: Beliebig viele Argumente abfragen
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
|
Anmeldungsdatum: Beiträge: 1253 |
Nimm ne Liste, das ist was du suchst. In [1]: def foo(*args): ...: print args ...: ...: In [2]: foo("bar", "baz") ('bar', 'baz') und: In [12]: def foo(**kwargs): ....: print kwargs ....: In [14]: foo(bar="bar", baz="baz") {'baz': 'baz', 'bar': 'bar'} |
(Themenstarter)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Würde er damit immer wieder die ganze Funktion mit dem nächsten Link durchspielen? Denn es passieren noch einige Sachen nach dem Öffnen der URL, die er aber immer nur bezogen auf eine URL machen soll. EDIT: Nö, klappt nicht so wirklich. So sieht das jetzt aus. Wenn ich an Stelle von sys.argv[1] nun (url) einsetze, lädt er überhaupt nichts mehr. Dass er jetzt immer noch das erste Argument nimmt, ist mir schon klar. |
Anmeldungsdatum: Beiträge: 1253 |
Du tust völlig wirre Dinge. Völlig wirre Dinge. http://docs.python.org/lib/module-optparse.html Und anstelle der vielen print's möchtest du dir Ich könnte dir jetzt ein Template geben....aber das musst du nun einfach mal selbst lernen. for arg in sys.argv[1:]: do_weird_stuff(arg) btw: btw²: |
(Themenstarter)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Okay, ich kann jetzt beliebig viele Videos laden. Bei den anderen Sachen weiß ich ehrlich gesagt nicht was mir das bringen soll. |
Anmeldungsdatum: Beiträge: 5792 |
snafu1 hat geschrieben:
Es bringt dir besseren Code. OptionParser verhilft dir dazu, Kommandozeilenargumente vernünftig zu parsen. Subprocess verhilft dir dazu, den Mplayer-Prozess vernünftig und sicher zu starten. Deine gegenwärtige Vorgehensweise ist schlichtweg fehlerhaft. Sie funktioniert z.B nicht bei Dateinamen mit Anführungszeichen oder Dollarzeichen, und ist absolut anfällig für Shell Injection. Das mag auf dem lokalen Rechner noch wenig gefährlich sein (abgesehen von Unfällen, die zu Datenverlust führen), aber wenn dein Skript mal auf einem Webserver laufen sollte, kann jeder Nutzer über geschickte Eingaben beliebige Befehle auf dem Webserver ausführen. Beherzige dir, was audax schon sage: Benutze niemals os.system! Andere Fehler: Ein pures except ist ebenfalls schlecht. Da in Python alles eine Ausnahme ist, fängst du damit sogar Syntax-Fehler ab. Sprich: Dein Skript könnte im try-Block einen Syntaxfehler haben, und du würdest nur "Konnte Link nicht finden!" lesen. |
Anmeldungsdatum: Beiträge: 2159 |
Lunar hat geschrieben:
Hmm, Seine Vorgehensweise würde wohl nur im Fehlerfall keine Meldung ausgeben, weswegen mann natürlich trotzdem Manuell schließen sollte. Bei lang laufenden Prozessen ist es natürlich immer gut so früh wie möglich Speicher frei zu geben. |
Anmeldungsdatum: Beiträge: 5792 |
Sid Burn hat geschrieben:
Natürlich wird das Dateiobjekt automatisch vom GC bereinigt. Nur arbeitet der GC nicht deterministisch, so dass der Zeitpunkt des Schließens zu keinem Zeitpunkt vorraussehbar ist. Dadurch wird das Schließen zum Glücksspiel. Das wollte ich damit sagen... Sid Burn hat geschrieben:
Es geht nicht nur um den Speicher. Das dürfte das geringste Problem sein, da die darunter liegenden C-Datenstrukturen zumindest für normale Dateien wahrscheinlich recht schlank sind. Viel problematischer ist z.B. das interne Buffering, was dazu führt, dass die Datei meistens bis zum Schließen oder zum expliziten Leeren des Puffers leer ist. Unter Windows handelt man sich zudem noch Probleme mit dem impliziten File-Locking ein. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Lunar hat geschrieben:
Aha, also ich hatte es bisher so verstanden, dass man dort mögliche Optionen angibt und er dann eine bestimmte Aktion ausführen lässt, wenn die entsprechende Option mitgegeben wird. Aber in meinem Fall ist ja nicht genau bekannt, welche Zeichenkette sozusagen angegeben wird. Ich weiss nur, dass es sich um einen Youtube-Link handelt. Oder meint ihr, ich soll in dem Fall mit Wildcards arbeiten? Lunar hat geschrieben:
Okay...ich habe zwar erstmal nur vor, das Skript bei mir auf dem Rechner laufen zu lassen, aber es ist ja sicher nicht verkehrt, früh mit den "richtigen" Befehlen zu arbeiten, bevor mir os.system noch in Fleisch und Blut übergeht. 😉 Lunar hat geschrieben:
Ja, das mit dem Schliessen wollte ich später noch machen. Ich empfinde es momentan eher als nervig, weil bisher immer alles geklappt hat auch ohne zu schliessen. Ich werde den Rat aber beherzigen... Lunar hat geschrieben:
Da war mein Problem: urllib liefert etwas mit HTTPError. Den scheint er jedoch nicht als Exception zu kennen. So wusste ich mir nicht anders zu helfen als dass jeder Fehler, der nicht KeybordInterrupt oder IndexError ist, in den allermeisten Fällen auftritt, weil er die URL nicht findet. Mir ist schon klar, dass dies eine eher vage Vermutung ist. Für den Privatgebrauch oder falls ich es an Bekannte weitergebe, reicht mir das jedoch. Ich bin allerdings anderen Lösungen nicht abgeneigt. |
Ehemalige
Anmeldungsdatum: Beiträge: 4578 Wohnort: Berlin |
Dann musst Du eben den HTTPError behandeln. Wenn Python diese Ausnahme nicht "kennt", dann hast Du sie nicht importiert oder nicht über das Modul referenziert. |
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
Lunar hat geschrieben:
In 90% der Fällen wird das Objekt eher von Py_DECREF entfernt und damit kann man schon ziemlich genau sagen wann das passiert. //EDIT: ist aber implementation detail, in IronPython kann man sich da nicht drauf verlassen. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Und wozu logging statt print? |
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
snafu1 hat geschrieben:
Weil man im Produktivbetrieb meist nicht nach stdout schaut sonderin in seine Inbox, systemlog etc. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Das finde ich aber für meine Bedürfnisse ehrlich gesagt etwas übertrieben. Ich schreibe hier nichts für einen Kunden, der in irgendwelche Serverlogs nachguckt (oder was auch immer ihr euch vorstellt), sondern ein einfaches Skript, das seinen Zweck erfüllen soll. 😉 |
Anmeldungsdatum: Beiträge: 3396 Wohnort: Hermagor, Kärnten - Österreich |
snafu1 hat geschrieben:
Ich sag ja nicht, dass es was für dich ist, aber das ist der Grund für das Modul. |