是否可以捕获wget和其他使用curses的命令行程序的输出? 这就是我现在所拥有的:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print "a"
这适用于具有简单输出的程序,但不适用于wget和其他使用curses的程序。
答案 0 :(得分:7)
我不相信wget
正在使用诅咒。
通常,当我想在脚本中使用wget
时,我会使用 -O -
选项将其输出强制为 stdout 。我怀疑你正在尝试捕获你在运行它时通常在控制台上看到的文本,这将是 stderr 。
在Python之外的命令行中,只需运行如下命令:
wget -O - http://www.somesite.org/ > /tmp/wget.out 2> /tmp/wget.err
然后查看两个输出文件。如果您在控制台/终端上看到来自wget
的任何输出,那么您运行的命令风格与我见过的不同。
如果我怀疑你真的对 stderr 消息感兴趣,那么你有两个选择。
shell=True
添加到您的Popen()
参数stderr=subprocess.PIPE
添加到您的Popen()
参数如果你不使用 stdout ,前者很方便(假设你使用了
wget
获取数据并将其写入文件中。在后一种情况下,您可以从 stderr 文件选项中读取数据。
pexpect
模块会好得多:
不要被年龄或版本编号吓到,它适用于Python 2.5和2.6以及2.4和2.3。