Wenn ich in Python "wget" verwende, um eine Datei mit os.system ("wget") herunterzuladen, wird dies auf dem Bildschirm wie folgt angezeigt:
%Vor%usw. auf dem Bildschirm.
Was kann ich tun, um diese Ausgabe in einer Datei zu speichern, anstatt sie auf dem Bildschirm anzuzeigen?
Momentan führe ich den Befehl wie folgt aus:
theurl="& lt; Speicherort der Datei & gt;"
downloadCmd="wget" + theurl
os.system (downloadCmd)
Um Ihre direkte Frage zu beantworten und wie andere bereits erwähnt haben, sollten Sie das Modul Unterprozess in Betracht ziehen. Hier ist ein Beispiel:
%Vor%Aber, keine Notwendigkeit, zum System aufzurufen, um eine Datei herunterzuladen, lassen Sie Python das schwere Heben für Sie erledigen.
Verwenden Sie urllib ,
%Vor%Oder urllib2 ,
%Vor% local_filename
ist der Zielpfad Ihrer Wahl. Es ist manchmal möglich, diesen Wert automatisch zu bestimmen, aber der Ansatz hängt von Ihren Umständen ab.
Die os.system
-Funktionen führen den Befehl über eine Shell aus, so dass Sie dort auch beliebige stdio-Weiterleitungen platzieren können. Sie sollten auch das -q
-Flag (quiet) für wget verwenden.
Es gibt jedoch bessere Möglichkeiten, dies in Python zu tun, wie zum Beispiel den pycurl-Wrapper für libcurl oder das Modul "stock" urllib2
.
Wie andere bemerkt haben, können Sie Pythons native Bibliotheksmodule für Ihre E / A verwenden oder Sie können die Befehlszeile ändern, um die Ausgabe umzuleiten.
Aber für die volle Kontrolle über die Ausgabe ist das beste, das Modul Python subprocess
anstelle von os.system()
zu verwenden. Mit subprocess
können Sie die Ausgabe erfassen und untersuchen oder beliebige Daten in die Standardeingabe einspeisen.
Wenn Sie schnell und einfach etwas ausführen möchten, verwenden Sie os.system()
. Wenn Sie die volle Kontrolle darüber haben möchten, wie Sie etwas ausführen, verwenden Sie subprocess
.
Der wget-Prozess schreibt gerade in STDOUT (und vielleicht STDERR, wenn etwas Schlimmes passiert) und diese sind immer noch mit dem Terminal "verkabelt".
Um das zu beenden, leiten Sie die Dateihandles um (oder schließen). Sehen Sie sich das Modul Subprozess an, mit dem Sie diese Dateihandles konfigurieren können, wenn Sie einen Prozess starten. ( os.system
hinterlässt nur den STDOUT / STDERR des erzeugten Prozesses und wird daher vererbt, aber das Subprozessmodul ist flexibler.)
Siehe Arbeiten mit dem Python-Subprozess - Shells, Prozesse, Streams, Pipes, Redirects und mehr für viele schöne Beispiele und Erklärungen (es führt die Konzepte von STDIN / STDOUT / STDERR ein und funktioniert von dort).
Es gibt wahrscheinlich bessere Möglichkeiten, damit umzugehen als mit wget - aber ich überlasse das anderen Antworten.
Glückliche Kodierung.
Tags und Links python