VBScript捕获Python异常并写入日志
学习笔记作者:admin日期:2025-05-30点击:178
摘要:介绍如何使用VBScript调用Python脚本,并捕获其标准错误输出(stderr),将错误信息写入日志文件。
VBScript捕获Python异常并写入日志
      本文介绍了如何使用VBScript调用Python脚本,并捕获其标准错误输出(stderr),将错误信息写入日志文件。
问题描述
      在VBScript中使用WshShell.Run方法运行Python脚本时,无法获取异常退出的错误信息。需要改用WshShell.Exec方法来捕获stderr。
解决方案
以下是完整的VBScript代码:
Dim pythonExe, scriptPath, logFile
' 配置路径
pythonExe = "C:\\Program Files\\Python311\\python.exe"
scriptPath = "C:\\Program Files\\CopyQ\\sync\\copy_mqtt.py"
logFile = "C:\\Program Files\\CopyQ\\sync\\error.log"  ' 日志文件路径
' 创建对象
Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
' 执行命令
Set exec = WshShell.Exec("""" & pythonExe & """ """" & scriptPath & """")
Set logStream = fso.OpenTextFile(logFile, 8, True)  ' 8 = 追加模式,True = 如果不存在则创建
' 读取错误输出并写入日志
Do While Not exec.StdErr.AtEndOfStream
    errLine = exec.StdErr.ReadLine()
    logStream.WriteLine Now & " - " & errLine
Loop
' 关闭流并释放资源
logStream.Close
Set logStream = Nothing
Set exec = Nothing
Set fso = Nothing
Set WshShell = Nothing
关键点解析
- WshShell.Exec:用于捕获标准输出和错误输出。
- fso.OpenTextFile:用于打开日志文件并写入错误信息。
- Now:记录错误发生的时间。
注意事项
- 确保运行脚本的用户对目标目录有写权限。
- 路径中的反斜杠需转义为双反斜杠(\\)。
示例日志内容
2025/4/5 10:20:00 - Traceback (most recent call last):
2025/4/5 10:20:00 -   File "C:\\Program Files\\CopyQ\\sync\\copy_mqtt.py", line 10, in 
2025/4/5 10:20:00 -     x = 1 / 0
2025/4/5 10:20:00 - ZeroDivisionError: division by zero