我正在使用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,)
答案 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)