2014-11-18 3 views
1

명령을 통해 파이썬 스크립트의 출력을 필터링하고 동시에 pdb.set_trace()을 정상적으로 사용할 수 있습니다.재 할당 된 sys.stdout으로 파이썬 pdb.set_trace()를 사용하는 방법은 무엇입니까?

나는이 스크립트를 실행

#!/usr/bin/python 

import sys, os, pdb 

print "first line" 
sys.stdout = os.popen('./filter', 'w') 
#pdb.set_trace() 
print "second line" 
print "third line" 

을하고 filter 스크립트는 이것이다 :

#!/usr/bin/python 

import subprocess, sys 

subprocess.call('cat', stdout=sys.stdout, stderr=sys.stderr, shell=True) 

모든 것이 잘 작동, 나는 터미널의 출력을 참조하십시오. 그러나, set_trace 행의 주석을 제거 할 때 디버거가 중단되어 명령을 사용할 수 있지만 전체 프로그램이 존재할 때까지 출력이 표시되지 않으므로 대화식 디버깅이 중단됩니다.

대화 형 디버깅이 작동하도록 filter을 변경하는 방법은 무엇입니까?

답변

3

직접 Pdb 인스턴스를 만들 수 있습니다. 예.

mypdb = pdb.Pdb(stdout=sys.__stdout__) 
+0

감사합니다.하지만 그렇게 할 수 없습니다. 스크립트를 변경하거나 사용자가'mypdb '를 사용할 것을 요구할 수 없습니다. 필터 만 변경할 수 있습니다. –