【问题标题】:Using wget with subprocess将 wget 与子进程一起使用
【发布时间】:2010-01-14 15:14:19
【问题描述】:

我正在尝试将 wget 与 subprocess 一起使用。

我的尝试一直有效,直到我尝试使用此代码将页面下载到指定目录:

url = 'google.com'
location = '/home/patrick/downloads'
args = ['wget', 'r', 'l 1' 'p' 'P %s' % location, url]

output = Popen(args, stdout=PIPE)

如果我在/home/patrick 中运行此代码,我会在/home/patrick 中得到index.html,而不是在/home/patrick/downloads 中。

你能帮帮我吗?

谢谢 ;)

【问题讨论】:

  • 为什么不使用 urllib 或 httplib?
  • 我认为不使用 python 库的主要原因是,如果您要获取大文件,则不必使用解释器内存来下载和处理它们 - 您只需将其交给另一个进程为完成那部分而构建,所有的 unix 都喜欢。
  • 我需要一个命令来下载整个网页:)

标签: python subprocess


【解决方案1】:

你需要有连字符,location 应该只是另一个参数:

args = ['wget', '-r', '-l', '1', '-p', '-P', location, url]

【讨论】:

  • 还有一些空格?所有这些单引号字符串都可以混合在一起,它们之间没有空格。
  • 现在它们之间有逗号,我认为它会起作用。在 Patrick 发布的代码中,那些没有逗号的代码,使它们成为数组的独立元素,所有 gget 连接在一起。您的回答正确,SilentGhost。
  • 是的!谢谢!它有效:D 我只是在 'l 1' 和 'p' 之后忘记了一些逗号;)
【解决方案2】:

编辑: popen from os 打算 replace os.popen 模块。因此,不推荐使用os.popen

一开始我以为是popen from os

如果您使用来自ospopen

#wget 'http://google.com/' -r -l 1 -p -P /Users/abhinay/Downloads

from os import popen

url = 'google.com'
location = '/Users/abhinay/Downloads'
args = ['wget %s', '-r', '-l 1', '-p', '-P %s' % location, url]

output = popen(' '.join(args))

并使用来自subprocessPopen

#wget 'http://google.com/' -r -l 1 -p -P Downloads/google

from subprocess import Popen

url = 'google.com'
location = '/Users/abhinay/Downloads'
#as suggested by @SilentGhost the `location` and `url` should be separate argument
args = ['wget', '-r', '-l', '1', '-p', '-P', location, url]

output = Popen(args, stdout=PIPE)

如果我遗漏了什么,请告诉我。

谢谢!

【讨论】:

  • 文档说:args 应该是一个字符串,或一系列程序参数。
  • subprocess.Popen 应该被用来代替 os.popen
  • @SilentGhost 最初我以为它是从操作系统弹出的,我现在编辑了我的答案。 @Corey 感谢您的建议!看起来popen 是旧的并被Popen 取代。
  • 天哪,我什至无法想象你会建议os.open,它确实需要一个字符串作为第一个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多