【问题标题】:How to stop subprocess.Popen() write desc in terminal如何停止 subprocess.Popen() 在终端中写入 desc
【发布时间】:2014-12-23 05:22:55
【问题描述】:

我正在使用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

如何停止它在终端中的显示,以便我可以向最终用户提供一些含义陈述。

代码sn-p是

fo = open(dump_file_path, 'wb')

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

【问题讨论】:

  • 什么是cmd?大概它正在写入stderr,也许您也想将其重定向到日志文件?
  • cmd 是我用来执行的命令,它返回一些文本,我想写入文件,cmd = ls -l | grep "tpd" ...不,我不希望 stderr 重定向到日志文件,所以我会将 stderr 设置为 false ..

标签: python-2.7 subprocess popen


【解决方案1】:

如果即使子进程的 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)

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2015-01-10
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多