【问题标题】:Duplicating terminal output from a Python subprocess从 Python 子进程复制终端输出
【发布时间】:2014-01-01 08:37:11
【问题描述】:

我正在编写一个用于调用 Ninja c/c++ 构建系统的包装脚本,该脚本在 python 中,它应该做的一件事是记录 Ninja 和底层编译器的输出,但不抑制标准输出。

给我带来麻烦的部分是 Ninja 似乎检测到它是否正在写入终端,所以简单地捕获输出并将其发送到标准输出最终会改变它(最值得注意的是,Ninja 不会填满屏幕带有警告和无错误构建文件的列表,但在新的翻译单元进入时删除了最后一个成功构建的翻译单元的行)。有什么方法可以让 Ninja 写入终端,同时仍然捕获其输出?写入终端应该在 Ninja 子进程运行时发生,但所述输出的捕获可能要等到子进程完成。

【问题讨论】:

    标签: python linux subprocess


    【解决方案1】:

    pty.spawn() 允许您将输出记录到文件中,同时欺骗 Ninja 子进程以为它可以与终端 (tty) 一起使用:

    import os
    import pty
    
    logfile = open('logfile', 'wb')
    
    def read(fd):
        data = os.read(fd, 1024)
        logfile.write(data)
        return data
    
    pty.spawn("ninja", read)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2017-04-28
      • 2018-05-28
      • 2013-07-21
      • 2019-04-10
      相关资源
      最近更新 更多