使用Python从命令行下载文件

13

我正在寻找一种快速的方式通过HTTP下载文件,使用命令行中的Python单行代码(类似于wgetcurl的功能)。这个想法是在Windows上启用快速复制/粘贴以下载distutils

我知道一个解决方案(见下面我的答案)。我对考虑以下因素的其他解决方案感兴趣:

  • 简洁
  • 最符合“Pythonic”风格的解决方案
  • 与Python 2和Python 3兼容
  • 跨平台
  • 能够有效地处理大型文件
  • 没有依赖关系(我们在这里获取distutils。在这个阶段使用requests的可能性很小)
  • 正确处理各种HTTP头,如Content-Disposition

2
Distutils和setuptools已经合并。为了实现我的原始目标:c:\python27\python.exe -c "from urllib import urlretrieve; urlretrieve('https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py', 'ez_setup.py')" & c:\python27\python.exe ez_setup.py - dwurf
2个回答

13

我能想到的最简单的解决方案是:

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 库中不会找到太多支持它的内容......


这个主要缺少的是能够通过CLI一行命令运行它的能力。我会将其标记为正确,因为它可以分成两个语句,一个用于python2,一个用于python3,可以处理大文件并作为一行命令运行。 - dwurf
5
Python 2: python -c "from urllib import urlretrieve; urlretrieve('http://python-distribute.org/distribute_setup.py', 'distribute_setup.py')"Python 2:python -c "from urllib import urlretrieve; urlretrieve('http://python-distribute.org/distribute_setup.py','distribute_setup.py')" - dwurf
5
Python 3 的翻译如下:python3 -c "from urllib.request import urlretrieve; urlretrieve('http://python-distribute.org/distribute_setup.py', 'distribute_setup.py')"。翻译内容:这是一条 Python 3 的命令,它会从网址 http://python-distribute.org/distribute_setup.py 中下载文件 distribute_setup.py。要执行此命令,只需在终端中输入即可。 - dwurf
2
Dwurf的答案是正确的: 原始问题希望这是适合直接从命令行调用的一行代码。(巧合的是,正是这个搜索结果将我带到了这里)。 - Scott Prive
1
Content-Disposition现在是一个标准。如果最近的Python版本已经实现了它,那我就不知道了。 https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html --> 19.5.1 Content-Disposition - iuridiniz

7

我的解决方案是:

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

1
这对于大文件来说真的很糟糕,而且它只适用于Python2。并不是OP想要的。 - mata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接