从Python子进程复制终端输出

2024-10-01 15:35:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

给我带来麻烦的是,忍者似乎能察觉到它是否在向终端写入数据,所以简单地捕捉输出并将其发送到标准输出最终会改变它(最显著的是,忍者不会用警告和无错误构建文件的列表填充屏幕,而是在新的翻译单元出现时删除最后一个成功构建的翻译单元的行)。有没有办法让忍者在捕捉输出的同时向终端写入数据?对终端的写入应该在Ninja子进程运行时发生,但是对所述输出的捕获可能要等到子进程完成之后。在


Tags: 数据脚本终端警告标准编译器进程系统
1条回答
网友
1楼 · 发布于 2024-10-01 15:35:44

^{}允许您将输出记录到一个文件中,同时欺骗忍者子进程认为它与终端(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)

相关问题 更多 >

    热门问题