如何停止subprocess.Popen()在终端中写desc

时间:2014-12-23 05:22:55

标签: python-2.7 subprocess popen

我正在使用subprocess.Popen()然后将日志输出重定向到文件,但在终端中它显示的内容如下:

 % Total    % Received % Xferd  Average Speed   Time   Time   Time  Current
                                 Dload  Upload   Total  Spent  Left  Speed
100  772k    0  772k    0     0  2576k    0 --:--:-- --:--:-- --:--:-- 5363k

如何阻止它在终端中显示,以便我可以向最终用户提供一些含义声明。

代码段是

fo = open(dump_file_path, 'wb')

stdout = subprocess.Popen(cmd, shell = True, stdout = fo,)

1 个答案:

答案 0 :(得分:0)

如果你看到输出,即使子进程'stdout被重定向到一个文件,那么子进程写入stderr或直接写入终端。

要检查stderr暂时重定向到STDOUT,看看输出是否仍然可见。

如果您不想重定向整个管道的stderr;您可以尝试仅重定向那些在stderr上产生不需要的输出的命令,例如,curl具有--stderr选项。或其他控制进度报告的选项。

将直接写入的输出重定向到终端;你可以使用pty(伪终端):

#!/usr/bin/env python
import os
import pty
import sys

with open(dump_file_path, 'wb') as file:
    def read(fd):
        data = os.read(fd, 1024)
        file.write(data)
        file.flush()
        return data

    pty.spawn(['/bin/sh', '-c', cmd], read)