如何将==或=输出到%stdout的内容直接写入文件或捕获为字符串
解决方案
直接将stdout输出写入文件的方案
- Shell/终端环境:直接使用输出重定向语法即可,执行命令时末尾加
> 目标文件路径会覆盖写入文件,加>> 目标文件路径会追加写入文件。
示例:your_command > output.txt可以把命令运行时所有输出到stdout的内容(包括=/==触发的打印内容)直接写入output.txt。 - 代码运行环境(以Python为例):临时重定向stdout到文件句柄
import sys # 保存原始stdout origin_stdout = sys.stdout with open("output.txt", "w") as f: # 将stdout指向文件 sys.stdout = f # 此处所有打印到stdout的内容都会写入文件 print("测试内容") # 等价于=触发的输出逻辑 # 恢复原始stdout sys.stdout = origin_stdout
- Jupyter 环境:可以直接用
%%writefile魔法命令,将整个单元格的代码运行输出写入文件:
%%writefile output.txt # 单元格内的所有代码运行输出都会写入output.txt print("测试内容")
捕获stdout为字符串后写入文件的方案
- Jupyter 环境:使用
%%capture魔术命令捕获单元格输出
%%capture cap # 此处执行所有需要输出的逻辑 a = 10 print(a) # 等价于=触发的输出逻辑
捕获完成后写入文件:
with open("output.txt", "w") as f: f.write(cap.stdout)
- 通用Python环境:使用
io.StringIO做缓冲区捕获输出
import sys from io import StringIO # 初始化缓冲区 buffer = StringIO() origin_stdout = sys.stdout sys.stdout = buffer # 执行输出逻辑 print("待捕获的内容") # 恢复stdout,获取捕获的字符串 sys.stdout = origin_stdout output_str = buffer.getvalue() # 写入文件 with open("output.txt", "w") as f: f.write(output_str)
如果你使用其他特定运行环境,核心逻辑通用:要么修改stdout输出目标为文件句柄,要么用缓冲区捕获stdout输出的字符串后调用对应写入方法即可。
内容的提问来源于stack exchange,提问作者David Feldman
相关产品推荐
相关产品推荐

