python重定向原理及实例
1. 前言
为了在Python编程中, 利用控制台信息, 我们需要对控制台输出进行接管(重定向)。在Python中,控制台输出的接口是sys.stdout,通过分析print与sys.stdout之间的关系,我们就可以实现控制台输出重定向了。
2. sys.stdout 与 print
当我们在 Python 中打印对象调用
print(obj)
的时候,事实上是调用了
# 在print(obj)的过程中, 会产生两次调用
sys.stdout.write(obj)
sys.stdout.write('\n')
所以, 我们只要创造一个替代的对象, 实现write方法, 就可以进行控制台输出重定向了.
3. 实战 之 同时重定向到控制台和文件
import sys
class __redirection__(object):
def __init__(self, filepath):
self.filepath = filepath
self.buff = ''
self.__console__ = sys.stdout
sys.stdout = self
def write(self, output_stream):
self.buff += output_stream
self.__console__.write(output_stream)
f = open(self.filepath,'w')
f.write(self.buff)
f.close()
def flush(self):
self.buff = ''
def __del__(self):
sys.stdout = self.__console__
if __name__ == '__main__':
def main():
r_obj=__redirection__(r'd:/temp/test.txt')
print('hello')
print('__redirection__')
main()
python重定向原理及实例的更多相关文章
- 【转】基于Python的接口测试框架实例
下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...
- 基于Python的接口测试框架实例
文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. ...
- Python的装饰器实例用法小结
这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...
- MATLAB神经网络原理与实例精解视频教程
教程内容:<MATLAB神经网络原理与实例精解>随书附带源程序.rar9.随机神经网络.rar8.反馈神经网络.rar7.自组织竞争神经网络.rar6.径向基函数网络.rar5.BP神经网 ...
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- Camera图像处理原理及实例分析-重要图像概念
Camera图像处理原理及实例分析 作者:刘旭晖 colorant@163.com 转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...
- 【类不类二】Python的类变量与实例变量
在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云), 搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变 量不是很理 ...
- Python基础-类变量和实例变量
Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...
- Python/Django-Web原理(一)
Python/Django-Web原理(一) websocket webSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML规范中被引用为TCP连接,作为基于TCP的套接字AP ...
随机推荐
- EasyUI, Dialog 在框架页(ifrmae)的Top页面弹出时,拖拽Dialog边缘(以改变窗口大小),UI界面被卡死的解决办法
将Dialog的modal属性设置为true,可以解决卡死的问题(但会给用户使用体验带来影响) var par = { title: This.title, width: This.width, he ...
- 1040 有几个PAT (25 分)
题目链接:1040 有几个PAT (25 分) 做这道题目,遇到了新的困难.解决之后有了新的收获,甚是欣喜! 刚开始我用三个vector数组存储P A T三个字符出现的位置,然后三层for循环,根据字 ...
- G. I love Codeforces
G. I love Codeforces 题目大意:给你n个字符串,以及m个喜欢关系,如果u喜欢v,这时候u会把它的用户名改为 I_love_ 加上v当时的用户名 Examples input 5an ...
- 6 DataFrame处理丢失数据--数据清洗
处理丢失数据 有两种丢失数据: · None · np.nan(NaN) 1 None None是Python自带的,其类 ...
- Nginx不转发http header
使用nginx做http代理时,在Header中使用了一个名为api_key的属性,碰到http header不转发的问题. 问题源码: rc = ngx_http_parse_header_line ...
- FORTIFY_SOURCE
In recent years Linux distributions started treating security more seriously. Out of many security f ...
- PHP array_count_values()
定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键(索引)是原数组的值,元素的值是该值在原数组中出现的次数. 语法 array_ ...
- HDU 5288
//枚举因子,查找和i最近的左右是i因子的点即可. #include <iostream> #include <cstdio> #include <algorithm&g ...
- [Debug] Use Remote Sources to Debug a Web App on an Emulator, Simulator, or Physical Device
We can emulate different operating systems, browsers, and devices within a desktop operating system. ...
- json、js数组真心不是想得那么简单
之前因为做前台的东西比較少,对于json和js数组的认识仅局限于一种固定格式.这样的固定的思维在开发前台时,特别是近期使用highcharts插件时.让我感到特别不明确.通过查询最终心头的疙瘩解开了. ...