python sys stdout_Python-如何将sys.stdout复制到日志文件?
编辑:由于似乎没有解决方案,或者我正在做一些人都不知道的非标准操作-我将修订我的问题,并问:当python应用正在制作日志时,完成记录的最佳方法是什么?很多系统调用?
我的应用程序有两种模式。在交互模式下,我希望所有输出都转到屏幕以及日志文件中,包括所有系统调用的输出。在守护程序模式下,所有输出进入日志。守护程序模式使用时效果很好os.dup2()。我找不到在不修改每个系统调用的情况下以交互方式将所有输出“发送”到日志的方法。
换句话说,我想要python应用程序生成的任何输出(包括系统调用output)的命令行“ tee”的功能。
澄清:
要重定向所有输出,我可以执行以下操作,并且效果很好:
# open our log file
so = se = open("%s.log" % self.name, 'w', 0)
# re-open stdout without buffering
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
# redirect stdout and stderr to the log file opened above
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
这样做的好处是,不需要其余代码即可进行特殊的打印调用。该代码还运行一些shell命令,因此不必分别处理它们的每个输出也很不错。
简而言之,除了复制而不是重定向外,我想做同样的事情。
乍一想,我认为简单地反转即可dup2。为什么不呢?这是我的测试:
import os, sys
### my broken solution:
so = se = open("a.log", 'w', 0)
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
os.dup2(sys.stdout.fileno(), so.fileno())
os.dup2(sys.stderr.fileno(), se.fileno())
###
print("foo bar")
os.spawnve("P_WAIT", "/bin/ls", ["/bin/ls"], {})
os.execve("/bin/ls", ["/bin/ls"], os.environ)
文件“ a.log”应与屏幕上显示的相同。
python sys stdout_Python-如何将sys.stdout复制到日志文件?相关推荐
- 仅用几行Python代码就能帮小姐姐复制U盘文件,实用干货
今天有个读大学的小姐姐找到我,问我有没有什么办法可以复制U盘文件,我很疑惑她复制U盘要干啥呢,仔细问了才知道小姐姐打算复制老师的U盘,看里面课件还有练习题,嗯,好学生呀,我就想直接分享出方法,大家一起 ...
- python 文件下载服务器异常_python 从远程服务器下载日志文件的程序
import os import sys import ftplib import socket ################################################### ...
- python 内置模块之os、sys、shutil
一.OS模块 用于提供系统级别的操作. OS 目录和文件 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改 ...
- python常见模块命令(os/sys/platform)
python常见模块命令(os/sys/platform) 一.Os Python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与平台无关. os.sep 可 ...
- python库测试记录(sys、time、datetime、random、hashlib)
sys库测试: ''' 当你导入一个模块,Python解析器对模块位置的搜索顺序是: 1.当前目录 2.如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录. 3.如果 ...
- Python 的 最全的sys
sys.argv 命令行参数 List,第一个元素是程序本身路径 sys.modules.keys() 返回所有已经导入的模块列表 sys.exc_info() 获取当前正在处理的异 ...
- python基础之 序列化,os,sys,random,hashlib
1.序列化 什么是序列化? 是将对象的状态信息转化为可以存储或传输的过程. 简单来说序列化就是一种用来处理对象流的机制.所谓对象流也就是将对象的 内容进行流化,流的概念这里不用多说(就是I/O).我们 ...
- python sys.path.append(),sys.path.insert()用法
python sys.path.append(),sys.path.insert()用法 添加import搜索路径 python程序中使用 import XXX 时,python解析器会在当前目录.已 ...
- python模块搜索路径 (sys.path)
导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件,然后在环境变量 PYTHONPATH 表示的目录列表中搜索,然后是环境变量 PATH 中的路径列表.如果 PYTH ...
最新文章
- 分布式实时日志分析解决方案ELK部署架构
- LNMP-源码 nginx ,keepalived
- node.js Centos安装
- TCP/IP / 如何进行流量控制( flow control )?
- 这些Python好书,助你开发一臂之力
- 正常配置文件实例模板
- java 编译 注释_Java编译、注释、常量简介
- Swagger天天用,但它背后的实现原理很多人都不知道!
- Ubuntu14.04 install appium
- matlab微带带通滤波器,带通滤波器的ADS仿真设计
- 优先部署EDI系统把握信息传输的主动权
- 需求与商业模式分析-1-商业模式画布
- Python函数知识点(详解)
- 苹果App Store商店中国区如何改为美国区
- 【java实现定时自动发送QQ消息】
- 西米推荐-FileYee:可能是最简单安全的数据文件备份软件
- 关于scf文件与找回丢失的显示桌面图标
- python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码
- uni 页面加载完毕_uni-app图片未加载完处理
- HDU1276士兵队列训练问题 循环队列
热门文章
- 数字IC设计(ASIC设计)完整流程详解
- java语音播报天气_语音播报实时天气
- Android拍照指定尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸...
- 菜鸟级别批处理命令IF~ELSE语法问题
- 为什么你会觉得苹果已无创新?耶稣已死,商人掌舵!!
- 接口测试管理平台手册
- 苹果系统无法购买服务器,梦幻西游手游iOS目前无法处理您的购买解决办法
- java类和对象在内存的表现形式
- 腾讯 WXG 后台开发工程师对 MySQL 索引知识点总结
- 外贸在谷歌搜索客户,为什么搜索出来的都是同行?