复制Pythonsubprocess的terminal输出

我正在调用忍者c / c + +构build系统的包装脚本,脚本是在Python中,它应该做的一件事是logging忍者和底层编译器的输出,但不抑制标准输出。

给我麻烦的部分是,忍者似乎检测到它正在写入terminal或不,所以简单地捕捉输出并发送到标准输出结束了改变它(最值得注意的是,忍者不填充屏幕列表警告和错误的构build文件,但删除最后成功build立的翻译单位的行,因为一个新的进来)。 有没有办法让忍者写入terminal,同时仍然捕获其输出? 写入到terminal应该发生在忍者subprocess运行,但是捕获所述输出可能要等到subprocess完成。

pty.spawn()允许你将输出记录到一个文件中,同时把忍者子pty.spawn()认为它和终端(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)