2016-09-01 3 views
0

저는 Python에서 새롭기 때문에 PyWinAuto 또는 Python에 대한 지식이있는 곳에서 문제가 무엇인지 명확히 말할 수는 없습니다.pywinauto가 예외를 throw하면 파일에 쓰기가 작동하지 않습니다.

#!/usr/bin/env python3 
import os 
import sys 
import pywinauto 

def testLicenseForm(): 
    app = pywinauto.Application().Start('Calc.exe') 

    try: 
     LicenseForm = app['Nonsense name'] 
     LicenseForm.OK.Click() 
#  raise pywinauto.findbestmatch.MatchError 
#  raise pywinauto.timings.TimeoutError 
    except (pywinauto.timings.TimeoutError, pywinauto.findbestmatch.MatchError) as e: 
     f = open('R:\Temp\diagnostic\log.errors', 'w') 
     f.write('Exception raised') 
     sys.exit('Error in script'.format(__file__)) 

if __name__ == '__main__': 
    testLicenseForm() 

문제는 생성 된 log.errors이지만, 빈 :

나는 다음 스크립트 윈도우 (파이썬 3.5.2)를 실행합니다. 나는 다음과 같은 코드를 변경하는 경우 :

# LicenseForm.OK.Click() 
    raise pywinauto.findbestmatch.MatchError 

log.errors 파일이 만들어지고 그 안에 예상되는 텍스트가 포함됩니다. 문제가있는 곳을 잘 모릅니다. pywinauto가 예외를 throw하면 파일에 정보를 쓰도록 스크립트를 변경하는 방법.

답변

0

f.write은 파일을 닫거나 (f.close()) f.flush() 할 때까지 데이터 쓰기가 보장되지 않습니다. 그러나 나는 당신에게 다음과 같은 방법을 권 해드립니다 : with 섹션에서 종료 할 때

with open('R:\Temp\diagnostic\log.errors', 'w') as f: 
    f.write('Exception raised') 

이 컨텍스트 매니저가 자동으로 파일을 닫습니다. 파일은 with 안에 예외가 발생하더라도 닫히게됩니다.

+0

고맙습니다! 그게 바로 제가 찾던 것입니다. 불행히도, 나는 당신의 대답을 upvote하기에 충분한 명성이 없습니다. – alesnn

+0

문제 없습니다. 당신은 upvoting없이 대답을 수락하실 수 있습니다. 왜냐하면 그것은 당신의 질문입니다. 받아들이 기 위해 평판은 중요하지 않습니다. –