2013-12-13 3 views
2

Ninja c/C++ 빌드 시스템에 대한 호출을위한 래퍼 스크립트를 작성 중이며 스크립트는 파이썬으로되어 있습니다. 한 가지해야 할 일은 Ninja 및 기본 컴파일러의 출력을 로그하는 것입니다 그러나 표준 출력을 억제하지 않고.파이썬 하위 프로세스에서 터미널 출력 복사하기

나를 괴롭히는 부분은 닌자가 터미널에 쓰고 있는지 아닌지 감지하는 것 같습니다. 출력물을 잡아서 표준 출력으로 보내면 간단히 변경됩니다 (특히 닌자는 화면에 경고 및 오류가없는 buildfiles 목록이 있지만 마지막으로 성공적으로 빌드 된 번역 단위의 행을 제거합니다. Ninja가 출력을 캡처하면서 터미널에 쓸 수있게 할 방법이 있습니까? 터미널로의 쓰기는 Ninja 하위 프로세스가 실행될 때 발생해야하지만, 해당 출력을 캡처하면 하위 프로세스가 완료 될 때까지 대기 할 수 있습니다.

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) 
:

답변

3

pty.spawn()

는 터미널 (TTY)와 함께 작동 생각에 닌자 서브 프로세스를 hoodwinking 동안 출력을 파일에 기록 할 수 있습니다
관련 문제