You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中捕获Python脚本错误输出并发送至邮件?

解决PowerShell捕获Python脚本错误输出并发送邮件的问题

问题原因

Python脚本抛出的未捕获异常信息默认输出到标准错误流(stderr),而你当前的$output = python runThisScript.py仅捕获了标准输出流(stdout),因此失败场景下$output为空,导致邮件内容空白。

解决方案

方法1:合并标准输出与错误输出

将Python的stderr重定向到stdout,一次性捕获所有输出内容,修改PowerShell执行命令如下:

$output = python runThisScript.py 2>&1

2>&1是PowerShell的流重定向语法,代表把错误流(编号2)的内容合并到输出流(编号1)中,这样$output会同时包含脚本正常打印的内容和错误的Traceback信息。

方法2:分别捕获标准输出与错误输出

如果需要区分处理正常输出和错误信息,可以使用Start-Process单独捕获两个流的内容:

# 启动Python脚本并分别重定向输出和错误到临时文件
$process = Start-Process -FilePath python -ArgumentList "runThisScript.py" -NoNewWindow -PassThru -RedirectStandardOutput "stdout.tmp" -RedirectStandardError "stderr.tmp"
$process.WaitForExit()

# 读取临时文件内容
$stdout = Get-Content "stdout.tmp"
$stderr = Get-Content "stderr.tmp"

# 合并或单独使用内容
$output = $stdout + $stderr
# 清理临时文件
Remove-Item "stdout.tmp", "stderr.tmp" -Force

结合退出码判断执行状态

Python脚本抛出未捕获异常时,会返回非0的退出码,可通过$LASTEXITCODE获取,用于区分执行结果并构造对应邮件内容:

---some line of code--
$output = python runThisScript.py 2>&1
$exitCode = $LASTEXITCODE

# 构造邮件主题和内容
if ($exitCode -eq 0) {
    $emailSubject = "Python脚本执行成功"
    $emailBody = "脚本执行输出:`n`n$($output -join "`n")"
} else {
    $emailSubject = "Python脚本执行失败"
    $emailBody = "脚本执行错误信息:`n`n$($output -join "`n")"
}
--- write email--- # 此处使用$emailSubject和$emailBody发送邮件

$output -join "n"`用于将数组形式的输出内容转换为换行分隔的字符串,保证邮件内容格式清晰。

内容的提问来源于stack exchange,提问作者Praneeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:35:23