Python脚本使用>重定向输出至文件为空问题排查
Python脚本print输出无法重定向到文件的排查方案
强制刷新输出缓冲
Python在重定向到文件时会默认启用块缓冲,导致输出不会即时写入文件。两种解决方式:- 给每个print语句添加
flush=True参数:print(str(datetime.now()) + " -COMIENZA LA EJECUCION", flush=True) - 启动脚本时用
-u参数禁用全局缓冲:PS C:\Users\Daniel\Documents\Proyectos\Bot> python -u .\bot.py > "log$(get-date -f dd-MM-yyy_HH-mm).txt"
- 给每个print语句添加
确认输出流是否正确
排查是否有输出被写入stderr而非stdout,用合并重定向命令验证:python -u .\bot.py *> "log$(get-date -f dd-MM-yyy_HH-mm).txt"
如果此命令能生成有内容的日志,说明代码中存在写入stderr的输出,检查是否使用了sys.stderr.write()或类似写法。检查stdout是否被代码篡改
排查脚本中是否有重新赋值sys.stdout的代码,比如将其指向其他文件或自定义流,这类操作会导致print输出不再流向终端默认的stdout,自然无法被重定向:import sys; sys.stdout = open('internal.log', 'w')解决PowerShell编码问题
PowerShell的重定向可能因编码适配问题导致文件显示为空,尝试用Out-File指定编码:python -u .\bot.py | Out-File -FilePath "log$(get-date -f dd-MM-yyy_HH-mm).txt" -Encoding utf8
内容的提问来源于stack exchange,提问作者Daniziz
相关产品推荐
相关产品推荐

