`
dacoolbaby
  • 浏览: 1254356 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python的subprocess模块实战 与 Linux 输出流重定向

阅读更多

在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 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!

    基于 python subprocess 实现的定时任务系统源码.zip

    python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 python subprocess 实现的定时任务系统源码.zip基于 ...

    python subprocess模块.docx

    运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这...另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

    Python subprocess模块功能与常见用法实例详解

    本文实例讲述了Python subprocess模块功能与常见用法。分享给大家供大家参考,具体如下: 一、简介 subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。...

    Python Subprocess模块原理及实例

    主要介绍了Python Subprocess模块原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Python subprocess模块常见用法分析

    本文实例讲述了Python subprocess模块常见用法。分享给大家供大家参考,具体如下: subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands....

    python模块之subprocess模块级方法的使用

    主要介绍了python模块之subprocess模块级方法的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python subprocess模块详细解读

    本文研究的主要是Python subprocess模块的相关内容,具体如下。 在学习这个模块前,我们先用Python的help()函数查看一下subprocess模块是干嘛的: DESCRIPTION This module allows you to spawn processes, connect...

    python subprocess 杀掉全部派生的子进程方法

    下面小编就为大家带来一篇python subprocess 杀掉全部派生的子进程方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    通过实例解析python subprocess模块原理及用法

    一、subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一...另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。 subprocess.call() 父进程

    Python 从subprocess运行的子进程中实时获取输出的例子

    在Python中,一个非常好的选择就是使用subprocess模块,本模块为开辟子进程去执行子程序提供了统一的接口,更加便于学习和使用。 同时,对于在子进程里的程序,我们希望能够实时获取其输出,以在主进程中打印相关...

    Python的subprocess模块总结

    subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行...

    对Python subprocess.Popen子进程管道阻塞详解

    使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理。 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess(self,cmd): try: # 执行外部shell命令...

    Python中subprocess模块用法实例详解

    主要介绍了Python中subprocess模块用法,实例分析了subprocess模块的相关使用技巧,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics