【发布时间】:2009-08-17 22:45:08
【问题描述】:
是否可以从 wget 和其他使用 curses 的命令行程序中捕获输出? 这是我现在拥有的:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
for line in p.stdout:
print "a"
这适用于具有简单输出的程序,但不适用于 wget 和其他使用 curses 的程序。
【问题讨论】:
-
我不认为 wget 使用诅咒。它只是将消息打印到标准错误而不是标准输出。
-
对于 wget 的情况,您可能需要拦截 stderr(请参阅 blog.doughellmann.com/2007/07/pymotw-subprocess.html 获取一些示例)对于拦截 curses 程序 - 我怀疑当您需要模拟时会很快变得乏味终端...
-
糟糕,我认为要更新现有行必须使用 curses。
-
在终端应用程序中打印进度条和微调器的常用方法是使用退格/擦掉字符。最好检查您的文件描述符是否已连接到终端(避免使用 ASCII 控制字符将常规文件弄乱)。但是,这不需要诅咒。事实上,Python termios 模块正是你所需要的。 (通常,即使没有 termios 模块,您也可以 sys.stdout.write(chr(0x08)) 在当前行的字符上退格)。
标签: python