在Liunx上面,会进行一些部署和监控的操作。
有时候使用crontab直接调用shell可以满足一定需求,但是最近在接受一部分运维项目的时候会发现。
部分脚本运行的过程中,stdout和stderr的输出流会无故丢失。
目前本人可以想到的方法,是利用python的subprocess模块进行调用,并记录下对应的stdout和stderr日志。
这里是一个实验,首先是一个python脚本。
模拟调用过程中会产生stdout日志和stderr信息。
#!/usr/bin/env python '''output test data to sys.stdout , sys.stderr''' import sys sys.stdout.write('hello in \n') sys.stderr.write('wolrd in \n')
在Linux上面通过subprocess模块进行调用shell。并收集其对应输出的信息。
#!/usr/bin/env python # coding=utf-8 import shlex, subprocess p = subprocess.Popen("python stdTest.py",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) sout = p.stdout.readlines() serr = p.stderr.readlines() print sout print serr
上面的代码中,主要使用了subprocess中的Popen对象。
shell=True 表示调用本地的shell,必选。
stdout=subprocess.PIPE
stderr=subprocess.PIPE
分表把stdout和stderr重定向到PIPE这个对象里面。进行缓存。
也可以在调用多个subprocess的时候,进行通信。
python stdTest.py 2> tmp.log 显示stdout的内容 hello in cat tmp.log 显示内容 wolrd in
默认情况下,stdout和stderr都会输出到console上面。
但是很多程序会通过配置文件,把stdout,stderr分别写入对应的文件中。
可以通过这个方式,进行stderr,stdout重定向:
command 2>&1 > tmp.log 表示把stderr输出流,重定向到stdout输出流。 再一同输出到tmp.log中
其中标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
command 3>&2 2>&1 1>&3 实现标准输出和错误输出的交换
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
refer to: http://www.cnblogs.com/yangyongzhi/p/3364939.html
相关推荐
python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!
python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 ...
运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这...另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。
本文实例讲述了Python subprocess模块功能与常见用法。分享给大家供大家参考,具体如下: 一、简介 subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。...
主要介绍了Python Subprocess模块原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本文实例讲述了Python subprocess模块常见用法。分享给大家供大家参考,具体如下: subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands....
主要介绍了python模块之subprocess模块级方法的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文研究的主要是Python subprocess模块的相关内容,具体如下。 在学习这个模块前,我们先用Python的help()函数查看一下subprocess模块是干嘛的: DESCRIPTION This module allows you to spawn processes, connect...
下面小编就为大家带来一篇python subprocess 杀掉全部派生的子进程方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一、subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一...另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。 subprocess.call() 父进程
在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和使用。 同时,对于在子进程里的程序,我们希望能够实时获取其输出,以在主进程中打印相关...
subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行...
使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理。 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess(self,cmd): try: # 执行外部shell命令...
主要介绍了Python中subprocess模块用法,实例分析了subprocess模块的相关使用技巧,需要的朋友可以参考下