在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的`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码的工具。它提供了多种方法来启动和控制子进程,使其能够执行操作系统命令或程序,这对于自动化任务和进程间通信...
4. **`subprocess`模块**:Python中的`subprocess`模块提供了一种方式来启动新的应用程序或命令、连接到其输入/输出/错误管道,并获取其返回码。 #### 在Linux下终止子进程及派生进程 在Linux系统中,可以通过设置...
值得注意的是,通过设置`stderr=subprocess.STDOUT`,我们将子进程的标准错误输出重定向到了标准输出,这样就可以通过读取标准输出来获取所有子进程的输出信息。 在子程序`subprogram.py`中,我们模拟了标准输出和...
本文实例讲述了Python subprocess模块功能与常见用法。分享给大家供大家参考,具体如下: 一、简介 subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。...
Python的Subprocess模块是用于创建新进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块提供了比`sys.module`的`sys.system()`函数更强大和灵活的功能,特别是在处理长时间运行的命令或需要与子...
本文实例讲述了Python subprocess模块常见用法。分享给大家供大家参考,具体如下: subprocess模块是python从2.4版本开始引入的模块。主要用来取代 一些旧的模块方法,如os.system、os.spawn*、os.popen*、commands....
在Python编程中,`subprocess`模块提供了创建新进程、连接到它们的输入/输出/错误管道以及获取它们的返回码的功能。这些功能对于执行外部命令和脚本非常有用。下面将详细介绍`subprocess`模块中的几个重要的方法,...
在Python编程中,`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。然而,`subprocess`模块的接口有时可能对初学者来说不够直观,Python Subprocess Utils 库就是为了简化...
stdout和stderr参数还可以设置为subprocess.STDOUT,这样标准错误的输出就会被重定向到标准输出流中。 shell参数可以设置为True,这样程序会通过shell来执行。这意味着可以直接传递一个字符串给shell来执行,类似于...
Python的`subprocess`模块是用于创建新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块提供了高级接口来启动进程,执行命令,并处理子进程的输出。它允许开发者在Python中模拟Unix shell的...
subprocess模块是Python用来替代旧的os.system, popen2和commands模块的,它允许你从Python程序中启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。今天我们要详细解析的是subprocess模块中的...
本文实例讲述了Python中subprocess模块用法。分享给大家供大家参考。具体如下: 执行命令: >>> subprocess.call([ls, -l]) 0 >>> subprocess.call(exit 1, shell=True) 1 测试调用系统中cmd命令,显示命令执行的...
subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行...