python stdout stderr 一起输出_合并Python脚本的子进程stdout和stderr,同时保持它们的区别...
我发现自己最近不得不解决这个问题,而且花了一段时间才得到一些我觉得在大多数情况下都能正常工作的东西,所以就这样!(它还具有通过python记录器处理输出的良好副作用,我注意到这是Stackoverflow中的另一个常见问题)。
代码如下:import sys
import logging
import subprocess
from threading import Thread
logging.basicConfig(stream=sys.stdout,level=logging.INFO)
logging.addLevelName(logging.INFO+2,'STDERR')
logging.addLevelName(logging.INFO+1,'STDOUT')
logger = logging.getLogger('root')
pobj = subprocess.Popen(['python','-c','print 42;bargle'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def logstream(stream,loggercb):
while True:
out = stream.readline()
if out:
loggercb(out.rstrip())
else:
break
stdout_thread = Thread(target=logstream,
args=(pobj.stdout,lambda s: logger.log(logging.INFO+1,s)))
stderr_thread = Thread(target=logstream,
args=(pobj.stderr,lambda s: logger.log(logging.INFO+2,s)))
stdout_thread.start()
stderr_thread.start()
while stdout_thread.isAlive() and stderr_thread.isAlive():
pass
输出如下:STDOUT:root:42
STDERR:root:Traceback (most recent call last):
STDERR:root: File "", line 1, in
STDERR:root:NameError: name 'bargle' is not defined
您可以替换子进程调用来执行任何您想要的操作,我只是选择了使用一个命令来运行python,我知道该命令将同时打印到stdout和stderr。关键位是在一个单独的线程中读取stderr和stdout。否则,当另一个数据准备好读取时,可能会阻塞一个数据的读取。
python stdout stderr 一起输出_合并Python脚本的子进程stdout和stderr,同时保持它们的区别...相关推荐
- python不换行空格输出_解决Python print输出不换行没空格的问题
解决Python print输出不换行没空格的问题 今天在做编程题的时候发现Python的print输出默认换行输出,并且输出后有空格. 题目要求输出 122 而我的输出是: 1 2 2 于是我百度查 ...
- python整数逆序输出_利用Python实现倒序任意整数
这是很早以前学习C时候做过的一个练习题,题目的要求大概是把用户输入的三位数倒序输出,比如说用户输入123,然后程序应该输出的结果是321.如果遇到用户输入100,那么程序应该输出1.然后我给扩展一下, ...
- python字典排序并输出_对Python的字典进行排序
我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...
- python输入文字垂直输出_在python中如何将横向输入的中文竖直输出
s.strip('.').split(',') 去掉最后的句号,然后以逗号为分隔符,把句子分开,存到一个list当中.执行完成后, lines=['白日依山尽', '黄河入海流', '欲穷千里目', ...
- python程序运行结果不停_关于python:在进程运行时不断打印Subprocess输出
要从我的python脚本启动程序,我使用以下方法: def execute(command): process = subprocess.Popen(command, shell=True, stdo ...
- python花式输出_关于python字符串format的一些花式用法
目录: 前提: python中字符串的format功能非常强大,可以说完全能够替代其他的字符串使用方法,但是在后期的项目开发中使用的并不是特别的多, 以至于想用的时候会想不起来准确的使用方法,所以在这 ...
- python直接执行代码漏洞_修复Python任意命令执行漏洞
Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...
- python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...
2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...
- python cookbook 中文百度云_《Python+Cookbook》第三版中文v3.0.0PDF高清完整版免费下载|百度云盘...
David Beazley是一位居住在芝加哥的独立软件开发者以及图书作者.他主要的工作在于编程工具,提供定制化的软件开发服务,以及为软件开发者.科学家和工程师教授编程实践课程.他最为人熟知的工作在于P ...
最新文章
- C++实现数组中求第K大数
- PHP解析JSON数据的源代码
- Wijmo 更优美的jQuery UI部件集:爱上 ThemeRoller
- redis可以存多少条数据_在银行存50万元,一年能有多少利息?不工作可以吗?...
- cf1208G Polygons 欧拉函数
- mysql中char,varchar与text类型的区别和选用
- opencv入门_【OpenCV入门之十八】通过形态学操作提取水平与垂直线
- Redis 如何实现主从复制
- axure怎样24位bmp输出_【白皮书】使用24位设备进行基础应变测量
- Oracle中job_type,【学习笔记】Oracle DBMS_SCHEDULER详细介绍与使用案例
- Activiti 6.0 概述与 Hello World 快速入门 与 核心 API 概述
- UrlRewrite 的配置和使用总结
- [matlab数字图像处理3]打开一副低对比度图像,拉伸其图像对比度
- UEFI 之 HelloWorld
- python编程 从入门到实践 第五章 if语句
- XSS-lab通关记录
- JUnit与Mockito单元测试典型示例
- INFLUXDB-influxDB一些查询语法你必须知道
- 分层强化学习综述:Hierarchical reinforcement learning: A comprehensive survey
- 传智播客2014王保明Linux培训系列教程