是否有可能从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的程序.
我不相信那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消息感兴趣,那么你有两个选择.
shell=True到您的Popen()参数stderr=subprocess.PIPE到您的Popen()参数中如果您还没有使用stdout,那么前者很方便(假设您使用
wget获取数据并将其写入文件).在后一种情况下,您从stderr文件选项中读取以获取数据.
顺便说一句:如果你确实需要捕获诅咒数据......你可以尝试使用标准的pty模块,但我不建议这样做.pexpect从以下方面获取模块你会好得多:
并且不要被年龄或版本编号吓到,它适用于Python 2.5和2.6以及2.4和2.3.