VBScript捕获Python异常并写入日志
学习笔记作者:admin日期:2025-05-30点击:18
摘要:介绍如何使用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