如果pywinauto抛出异常,写入文件将不起作用

时间:2016-09-01 01:42:26

标签: python windows fwrite pywinauto

我是Python的新手,所以不能肯定地说问题出在哪里:在PyWinAuto或我对Python的了解。

我运行下一个脚本Windows(Python 3.5.2):

#!/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,但是为空。如果我改变这样的代码:

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

创建了log.errors文件并在其中包含预期的文本。 不确定问题出在哪里。如果pywinauto抛出异常,如何更改脚本以将一些信息写入文件。

1 个答案:

答案 0 :(得分:0)

在您关闭文件(f.write)或执行f.close()之前,

f.flush()不保证会写入数据。但我建议您采用以下方式:

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

此上下文管理器将在退出with部分时自动关闭文件。即使在with内引发异常,该文件也会保证关闭。