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

上一篇      下一篇