编辑:由于似乎没有解决方案,或者我正在做一些人都不知道的非标准操作-我将修订我的问题,并问:当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复制到日志文件?相关推荐

  1. 仅用几行Python代码就能帮小姐姐复制U盘文件,实用干货

    今天有个读大学的小姐姐找到我,问我有没有什么办法可以复制U盘文件,我很疑惑她复制U盘要干啥呢,仔细问了才知道小姐姐打算复制老师的U盘,看里面课件还有练习题,嗯,好学生呀,我就想直接分享出方法,大家一起 ...

  2. python 文件下载服务器异常_python 从远程服务器下载日志文件的程序

    import os import sys import ftplib import socket ################################################### ...

  3. python 内置模块之os、sys、shutil

    一.OS模块 用于提供系统级别的操作. OS 目录和文件 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改 ...

  4. python常见模块命令(os/sys/platform)

    python常见模块命令(os/sys/platform) 一.Os Python的标准库中的os模块主要涉及普遍的操作系统功能.可以在Linux和Windows下运行,与平台无关. os.sep 可 ...

  5. python库测试记录(sys、time、datetime、random、hashlib)

    sys库测试: ''' 当你导入一个模块,Python解析器对模块位置的搜索顺序是: 1.当前目录 2.如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录. 3.如果 ...

  6. Python 的 最全的sys

      sys.argv 命令行参数 List,第一个元素是程序本身路径   sys.modules.keys() 返回所有已经导入的模块列表   sys.exc_info() 获取当前正在处理的异 ...

  7. python基础之 序列化,os,sys,random,hashlib

    1.序列化 什么是序列化? 是将对象的状态信息转化为可以存储或传输的过程. 简单来说序列化就是一种用来处理对象流的机制.所谓对象流也就是将对象的 内容进行流化,流的概念这里不用多说(就是I/O).我们 ...

  8. python sys.path.append(),sys.path.insert()用法

    python sys.path.append(),sys.path.insert()用法 添加import搜索路径 python程序中使用 import XXX 时,python解析器会在当前目录.已 ...

  9. python模块搜索路径 (sys.path)

    导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件,然后在环境变量 PYTHONPATH 表示的目录列表中搜索,然后是环境变量 PATH 中的路径列表.如果 PYTH ...

最新文章

  1. 分布式实时日志分析解决方案ELK部署架构
  2. LNMP-源码 nginx ,keepalived
  3. node.js Centos安装
  4. TCP/IP / 如何进行流量控制( flow control )?
  5. 这些Python好书,助你开发一臂之力
  6. 正常配置文件实例模板
  7. java 编译 注释_Java编译、注释、常量简介
  8. Swagger天天用,但它背后的实现原理很多人都不知道!
  9. Ubuntu14.04 install appium
  10. matlab微带带通滤波器,带通滤波器的ADS仿真设计
  11. 优先部署EDI系统把握信息传输的主动权
  12. 需求与商业模式分析-1-商业模式画布
  13. Python函数知识点(详解)
  14. 苹果App Store商店中国区如何改为美国区
  15. 【java实现定时自动发送QQ消息】
  16. 西米推荐-FileYee:可能是最简单安全的数据文件备份软件
  17. 关于scf文件与找回丢失的显示桌面图标
  18. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码
  19. uni 页面加载完毕_uni-app图片未加载完处理
  20. HDU1276士兵队列训练问题 循环队列

热门文章

  1. 数字IC设计(ASIC设计)完整流程详解
  2. java语音播报天气_语音播报实时天气
  3. Android拍照指定尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸...
  4. 菜鸟级别批处理命令IF~ELSE语法问题
  5. 为什么你会觉得苹果已无创新?耶稣已死,商人掌舵!!
  6. 接口测试管理平台手册
  7. 苹果系统无法购买服务器,梦幻西游手游iOS目前无法处理您的购买解决办法
  8. java类和对象在内存的表现形式
  9. 腾讯 WXG 后台开发工程师对 MySQL 索引知识点总结
  10. 外贸在谷歌搜索客户,为什么搜索出来的都是同行?