2013-03-04 3 views
2

Windows 시스템에서 msbuild를 사용하여 솔루션 파일을 빌드하는 python 스크립트가 있습니다. 빌드 프로세스가 실행 중일 때 명령 프롬프트 출력을 표시하고 싶습니다.파이썬의 별도 창에서 명령 프롬프트 출력 읽기

def build(self,projpath): 
    if not os.path.isfile(self.msbuild): 
     raise Exception('MSBuild.exe not found. path=' + self.msbuild) 

    arg1 = '/t:Rebuild' 
    arg2 = '/p:Configuration=Release' 
    p = subprocess.call([self.msbuild,projpath,arg1,arg2]) 
    print p 
    if p==1: 
     return False 
    return True 

이하 나는 파일을 만들 수 있어요,하지만 난 .I 파일로 명령 프롬프트 출력을 리디렉션을 많이 시도하고 읽을 별도의 GUI (상태 창)에서 빌드 상태를 표시해야합니다 파일을 만들지 못했습니다. 나는 아래 명령을 시도 ,

subprocess.check_output('subprocess.call([self.msbuild,projpath,arg1,arg2])', shell=False) > 'C:\tmp\file.txt' 

사람이 제가 상태 창에서 명령 프롬프트에서 모든 출력이 보여줄 수있는 방법을 알려 주시기 바랍니다 (wxPython을을 사용하여 GUI)는 내가 스크립트를 실행

때?

답변

4

wxPython을 사용하여 traceroute 및 ping 명령을 캡처하려는 경우 이와 같은 작업을 수행했습니다. http://www.blog.pythonlibrary.org/2010/06/05/python-running-ping-traceroute-and-more/ 모두의

먼저 당신이 기본적으로 이렇게 가고있는 redirect stdout해야합니다 : :이 튜토리얼에 대해 쓴

redir=RedirectText(log) 
sys.stdout=redir 
RedirectText이 같은 wx.TextCtrl을 허용하는 특별한 클래스가

논의.

class RedirectText(object): 
    def __init__(self,aWxTextCtrl): 
     self.out=aWxTextCtrl 

    def write(self,string): 
     self.out.WriteText(string) 

을 그리고 여기 내 ping 명령의 예 : 아래를 참조

proc = subprocess.Popen("ping %s" % ip, shell=True, 
         stdout=subprocess.PIPE) 
print 
while True: 
    line = proc.stdout.readline()       
    wx.Yield() 
    if line.strip() == "": 
     pass 
    else: 
     print line.strip() 
    if not line: break 
proc.wait() 

그래서 그냥 하위 프로세스를 실행하고 출력이기 때문에 데이터를 잡기 위해 자사의 readline 기능을 사용해야합니다. 그런 다음 텍스트 컨트롤로 리디렉션되는 stdout에 출력을 인쇄합니다. wx.Yield()를 호출하면 텍스트 컨트롤이 실시간으로 업데이트됩니다. 그렇지 않으면, 서브 프로세스가 완료된 후에 갱신됩니다.

+0

감사합니다. @ Mike.Your 코드를 사용하면 프레임 패널에 파이썬 명령 줄 출력을 표시 할 수있었습니다. 하지만, 파이썬 명령을 호출 할 때 Windows 명령 프롬프트 출력이 내 패널에 표시되기를 원합니다! – Aramanethota