Python捕获wget的输出?

Alv*_*Row 2 python

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

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

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

Jim*_*nis 7

我不相信那wget是在使用诅咒.

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

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

wget -O - http://www.somesite.org/ > /tmp/wget.out 2> /tmp/wget.err
Run Code Online (Sandbox Code Playgroud)

然后看两个输出文件.如果您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.