Ich musste so etwas unter einer Linux-Version machen, bei der nicht die richtigen Optionen in wget kompiliert waren. In diesem Beispiel wird das Speicheranalysetool 'guppy' heruntergeladen. Ich bin nicht sicher, ob es wichtig ist oder nicht, aber ich habe den Namen der Zieldatei mit dem Namen des URL-Ziels identisch gehalten ...
Folgendes habe ich mir ausgedacht:
python -c "import requests; r = requests.get('https://pypi.python.org/packages/source/g/guppy/guppy-0.1.10.tar.gz') ; open('guppy-0.1.10.tar.gz' , 'wb').write(r.content)"
Das ist der Einzeiler, hier ist es etwas lesbarer:
import requests
fname = 'guppy-0.1.10.tar.gz'
url = 'https://pypi.python.org/packages/source/g/guppy/' + fname
r = requests.get(url)
open(fname , 'wb').write(r.content)
Dies funktionierte zum Herunterladen eines Tarballs. Ich konnte das Paket extrahieren und nach dem Herunterladen herunterladen.
BEARBEITEN:
Um eine Frage zu beantworten, finden Sie hier eine Implementierung mit einem Fortschrittsbalken, der in STDOUT gedruckt wird. Es gibt wahrscheinlich eine tragbarere Möglichkeit, dies ohne das clint
Paket zu tun , aber dies wurde auf meinem Computer getestet und funktioniert einwandfrei:
from clint.textui import progress
import requests
fname = 'guppy-0.1.10.tar.gz'
url = 'https://pypi.python.org/packages/source/g/guppy/' + fname
r = requests.get(url, stream=True)
with open(fname, 'wb') as f:
total_length = int(r.headers.get('content-length'))
for chunk in progress.bar(r.iter_content(chunk_size=1024), expected_size=(total_length/1024) + 1):
if chunk:
f.write(chunk)
f.flush()