2013-06-18 45 views
5

我正在尋找一種快速的方式來通過HTTP使用命令行中的python單行程(類似於wgetcurl的功能)來下載文件。這個想法是啓用快速複製/粘貼在Windows上下載distutils使用python從命令行下載文件

我知道一個解決方案(請參閱下面的答案)。我感興趣的是考慮以下其他的解決方案:

  • 簡明
  • 最「Python化」解決方案
  • 既python2和python3
  • 跨平臺
  • 可處理大型文件兼容有效
  • 沒有依賴關係(我們在這裏提取distutils,我們不太可能在此階段訪問requests
  • 正確處理各種HTTP頭如Content-Disposition
+1

Distutils和setuptools已合併。爲了實現我最初的目標:從urllib import urlretrieve; urlretrieve('https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py','ez_setup')提供'c:\ python27 \ python.exe -c'。 py')「&c:\ python27 \ python.exe ez_setup.py' – dwurf

回答

4

我能想出的最簡單的解決辦法是:

try: 
    from urllib.request import urlretrieve 
except ImportError: 
    from urllib import urlretrieve 

urlretrieve('http://example.org', 'outfile.dat') 

urlretrieve需要下載的護理資源到本地文件並且可以處理大文件。

但是它會忽略Content-Disposition標題,如果您想要考慮這個標題,您需要使用urlopen並自己解析響應標題。 Content-Disposition不是HTTP標準頭文件,所以我懷疑你會在python http庫中找到它的很多支持...

+0

這個不具備的主要功能是通過CLI單線程運行它。我將其標記爲正確的,因爲它可以分成兩個語句,一個用於python2,另一個用於python3,可以處理大型文件並作爲單線程運行。 – dwurf

+4

Python 2:'python -c「from urllib import urlretrieve; urlretrieve('http://python-distribute.org/distribute_setup.py','distribute_setup.py')」' – dwurf

+0

Python 3:'python3 -c「from urllib.request import urlretrieve; urlretrieve('http://python-distribute.org/distribute_setup.py','distribute_setup.py')「' – dwurf

5

我的解決辦法是:

python -c "import urllib; print urllib.urlopen('http://python-distribute.org/distribute_setup.py').read()" > distribute_setup.py 
+0

這對大文件來說確實很糟糕,它只能在python2上運行。不是真正的OP想要的。 – mata