`
dacoolbaby
  • 浏览: 1267324 次
  • 性别: 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的`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码的工具。它提供了多种方法来启动和控制子进程,使其能够执行操作系统命令或程序,这对于自动化任务和进程间通信...

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

    4. **`subprocess`模块**:Python中的`subprocess`模块提供了一种方式来启动新的应用程序或命令、连接到其输入/输出/错误管道,并获取其返回码。 #### 在Linux下终止子进程及派生进程 在Linux系统中,可以通过设置...

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

    值得注意的是,通过设置`stderr=subprocess.STDOUT`,我们将子进程的标准错误输出重定向到了标准输出,这样就可以通过读取标准输出来获取所有子进程的输出信息。 在子程序`subprogram.py`中,我们模拟了标准输出和...

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

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

    Python Subprocess模块原理及实例

    Python的Subprocess模块是用于创建新进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块提供了比`sys.module`的`sys.system()`函数更强大和灵活的功能,特别是在处理长时间运行的命令或需要与子...

    Python subprocess模块常见用法分析

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

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

    在Python编程中,`subprocess`模块提供了创建新进程、连接到它们的输入/输出/错误管道以及获取它们的返回码的功能。这些功能对于执行外部命令和脚本非常有用。下面将详细介绍`subprocess`模块中的几个重要的方法,...

    PyPI 官网下载 | python-subprocess-utils-0.0.1.tar.gz

    在Python编程中,`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。然而,`subprocess`模块的接口有时可能对初学者来说不够直观,Python Subprocess Utils 库就是为了简化...

    Python subprocess模块详细解读

    stdout和stderr参数还可以设置为subprocess.STDOUT,这样标准错误的输出就会被重定向到标准输出流中。 shell参数可以设置为True,这样程序会通过shell来执行。这意味着可以直接传递一个字符串给shell来执行,类似于...

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

    Python的`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块提供了高级接口来启动进程,执行命令,并处理子进程的输出。它允许开发者在Python中模拟Unix shell的...

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

    subprocess模块是Python用来替代旧的os.system, popen2和commands模块的,它允许你从Python程序中启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。今天我们要详细解析的是subprocess模块中的...

    Python中subprocess模块用法实例详解

    本文实例讲述了Python中subprocess模块用法。分享给大家供大家参考。具体如下: 执行命令: >>> subprocess.call([ls, -l]) 0 >>> subprocess.call(exit 1, shell=True) 1 测试调用系统中cmd命令,显示命令执行的...

    Python的subprocess模块总结

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

Global site tag (gtag.js) - Google Analytics