Python文件中将print的输出内容重定向到变量中
有时候需要用到别人的代码, 但是又不想修改别人的文件, 想拿到输出的结果, 这时候就需要使用sys模块, 将print输出的内容重定向到变量中.
Python调用sys模块中的sys.stdout, 实际上是调用的sys.stdout.write方法, 这样如果操作的对象是文件就不会有问题.
import sys
# 保存当前的sys.stdout状态, 开始捕获当前的输出
current = sys.stdout
f = open(path, 'w')
# 这一步实际是sys.stdout.write, 当sys捕获到了print输出的时候, 就写入f里面
sys.stdout = f
print 'test'
# 恢复状态, 之后的print内容都不捕获了
sys.stdout = current
但是当把f文件对象改为一个变量时, 就会报错AttributeError: 'str' object has no attribute 'write', 原因是变量没有write方法, 所以根据这个, 我们可以重写一个方法.
import sys
class __Autonomy__(object):
"""
自定义变量的write方法
"""
def __init__(self):
"""
init
"""
self._buff = ""
def write(self, out_stream):
"""
:param out_stream:
:return:
"""
self._buff += out_stream
current = sys.stdout
a = __Autonomy__()
# 会调用a的write方法, 和self._buff的内容拼接
sys.stdout = a
print 'test'
sys.stdout = current
# 输出捕获的内容
print a._buff
Python文件中将print的输出内容重定向到变量中的更多相关文章
- 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...
- 【每日一个小技巧】Python | input的提示信息换行输出,提示信息用变量表示
[每日一个小技巧]Python | input的提示信息换行输出,提示信息用变量表示 在书写代码的途中,经常会实现这样功能: 请输入下列选项前的序号: 1.选择1 2.选择2 3.选择3 在pytho ...
- Linux命令执行的屏幕输出内容重定向到日志文件
摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...
- python文件操作及格式化输出
1 文件与IO 1.1读写文本数据 读写各种不同的文本数据,如ASCII,UTF-8,UTF-9编码等. 使用带有rt模式的open()函数读取文本文件. 例如: with open('db', 'r ...
- 使用feof()判断文件结束时会多输出内容的原因
这是原来的代码: #include <stdio.h>int main(){ FILE * fp; int ch; fp = fopen("d:\\aaaaa\ ...
- Python 文件的输入与输出
1. 文本文件的读写主要通过open()所构建的文件对象来实现.我们打开一个文件,并使用一个对象来表示该文件 , f = open(d,r) 其中d是文件名,r是模式 "r" 文件 ...
- python执行linux shell管道输出内容
干净不留痕,用过都说好. echo "print 1+1" |python
- python json按输入顺序输出内容
通过使用collecions,进行排序.collections是一个python的内建模块. import collections dic = collections.OrderedDict() # ...
- Python3基础 print(,end=) 输出内容的末尾加入空格
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
随机推荐
- 由Maximum Gap,对话桶排序,基数排序和统计排序
一些非比较排序 在LeetCode中有个题目叫Maximum Gap.是求一个非排序的正数数列中按顺序排列后的最大间隔.这个题用桶排序和基数排序都能够实现.以下说一下桶排序.基数排序和计数排序这三种非 ...
- ios 拿到第一响应者的当前视图
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; UIView *firstResponder = [keyWi ...
- N+1:创新点的设计
定义.公式.模型.算法的提出: 0. 如何进行抽象,如何定义数学表达式 二次衰减函数: f(z)=1z2 ⇒ f(z)=11+z2 噪声衰减因子: 对值域的要求,单调性的要求,必须是可调的: 2n1+ ...
- [自带避雷针]DropShadowEffect导致内存暴涨
原文:[自带避雷针]DropShadowEffect导致内存暴涨 [自带避雷针]DropShadowEffect导致内存暴涨 周银辉 从学习WPF开始, 就知道"位图效果"不是什 ...
- WPF实现弹幕
实现效果 运用WPF的DoubleAnimation实现桌面端的弹幕效果 示例代码 https://github.com/zLulus/BarrageDemo
- 模拟请求(模拟header gzip解压 泛型)
WebClient HeaderData是自定义类对象,存储header信息 private static T GetDataCommonMethod<T>(string url, str ...
- WPF 附加属性的使用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- HALCON 光圈和景深的关系
光圈越大,越亮,景深越小 光圈越小,越暗,景深越大 景深为成像清晰的那个范围
- 在mac中如何清除.svn文件
有些时候在开发一个应用程序我们需要用到版本控制,它可以帮助我们很好的控制我们程序的代码,尤其在多人开发的时候,优点尤为突出. 但是在有些情况下我们又认为这些.svn真的很麻烦,那么我们怎么把他们一下子 ...
- JS超链接动态显示图片
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...