Python捕获wget的输出?

时间:2009-08-17 22:45:08

标签: python

是否可以捕获wget和其他使用curses的命令行程序的输出? 这就是我现在所拥有的:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
    print "a"

这适用于具有简单输出的程序,但不适用于wget和其他使用curses的程序。

1 个答案:

答案 0 :(得分:7)

我不相信wget正在使用诅咒。

通常,当我想在脚本中使用wget时,我会使用 -O - 选项将其输出强制为 stdout 。我怀疑你正在尝试捕获你在运行它时通常在控制台上看到的文本,这将是 stderr

在Python之外的命令行中,只需运行如下命令:

wget -O - http://www.somesite.org/ > /tmp/wget.out 2> /tmp/wget.err

然后查看两个输出文件。如果您在控制台/终端上看到来自wget的任何输出,那么您运行的命令风格与我见过的不同。

如果我怀疑你真的对 stderr 消息感兴趣,那么你有两个选择。

  • 更改您的命令以添加2>& 1并将shell=True添加到您的Popen()参数
  • 或者(并且最好)将stderr=subprocess.PIPE添加到您的Popen()参数

如果你不使用 stdout ,前者很方便(假设你使用了 wget获取数据并将其写入文件中。在后一种情况下,您可以从 stderr 文件选项中读取数据。

顺便说一句:如果你确实需要捕获诅咒数据......你可以尝试使用标准的 pty 模块但我不会不推荐。从获取 pexpect 模块会好得多:

不要被年龄或版本编号吓到,它适用于Python 2.5和2.6以及2.4和2.3。