如何将python -v命令的导入模块相关详细输出重定向到文件中
问题原因
Python的-v/-vv参数输出的模块导入日志属于标准错误流(stderr),你之前执行的python -v mysrcipt.py 2>&1 > file.txt命令顺序不符合shell重定向规则:
shell重定向是按从左到右的顺序执行的,
2>&1 > file.txt会先把stderr绑定到当前的stdout(此时stdout还指向终端),再把stdout重定向到文件,最终stderr还是会输出到终端,不会写入文件。
正确重定向方案
1. 所有输出(脚本运行日志+模块导入日志)写入同一个文件
两种等价写法:
# 写法1:先重定向stdout,再把stderr绑定到已重定向的stdout python -v myscript.py > all_output.txt 2>&1 # 写法2:Bash/Zsh等shell支持的简写语法 python -v myscript.py &> all_output.txt
2. 脚本日志和导入日志分开存储
如果需要单独提取模块导入日志做对比,可以把两个流拆分到不同文件:
# script_output.log 存脚本本身的标准输出,import_verbose.log 存导入日志和报错信息 python -v myscript.py > script_output.log 2> import_verbose.log
注意事项
- 注意脚本名拼写:你示例命令中的
mysrcipt.py存在拼写错误,实际执行时请替换为正确的脚本文件名 - 若需要保留终端输出同时写入文件,可以配合
tee命令使用:python -v myscript.py 2>&1 | tee all_output.txt
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

