나는 stdout을 생성하는 두 개의 프로그램 (컴파일 된 C 코드)을 실행하기 위해 subprocess.Popen을 사용하는 파이썬 스크립트를 작성하고 있습니다. 스크립트는 해당 출력을 가져 와서 파일에 저장합니다. 때때로 출력이 subprocess.PIPE를 압도하기에 충분히 커서 스크립트가 멈추기 때문에 stdout을 로그 파일에 직접 보냅니다. 내 스크립트는 파일의 처음과 끝에 그리고 두 개의 하위 프로세스 사이에 무언가를 쓰게하고 싶다 .Popen 호출. 그러나 로그 파일을 볼 때 스크립트에서 로그 파일에 기록한 모든 내용이 모두 파일 맨 위에 함께 표시되고 모든 실행 가능 표준 출력이 이어집니다. 추가 된 텍스트를 어떻게 파일에 삽입 할 수 있습니까?서브 프로세스에서 stdout 저장. 파일을 열거 나 더 많은 내용을 파일에 더하기
def run(cmd, logfile):
p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=logfile)
return p
def runTest(path, flags, name):
log = open(name, "w")
print >> log, "Calling executable A"
a_ret = run(path + "executable_a_name" + flags, log)
print >> log, "Calling executable B"
b_ret = run(path + "executable_b_name" + flags, log)
print >> log, "More stuff"
log.close()
로그 파일이 있습니다 : 실행 B 를 호출 실행 호출 더 많은 물건 [... 모두 실행 파일에서 표준 출력 ...]
I가 A의 표준 출력을 세척 할 수있는 방법이 있나요 Popen을 호출 한 후의 로그? 관련성이있는 한 가지 더 : 실행 가능한 A 시작은 B에서 시작되고 B가 물건을 인쇄하고 끝내면 A가 더 많은 내용을 인쇄하고 끝납니다.
저는 RHE Linux에서 Python 2.4를 사용하고 있습니다.
stdout = subprocess.PIPE를 사용하고 외부 루프에서 로그 파일에 모든 내용을 쓰게되면 내 텍스트를 실행 파일의 출력으로 인터리브 할 수있었습니다. 텍스트를 추가하지 않으면 로그에 다음 순서로 내용이 있습니다. 1) 출력 2) B 출력 3) 나머지 A 출력. 나는 그 단계들의 앞이나 뒤에 각각 텍스트를 추가 할 수있었습니다. 이제는 로그의 시작 또는 끝에 텍스트 만 추가 할 수 있습니다. A가 B에서 핸드 셰이크를 기다리기 때문에 A가 끝날 때까지 B가 시작되지 않기 때문에 Popen이 스크립트를 정지시킨 후 wait()를 추가합니다.이 방법으로 로그에 내 텍스트를 삽입 할 수 있습니까? – jasper77