首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让sh python模块记录stderr/stdout并且只捕获stdout?

在Python中,可以使用subprocess模块来执行外部命令,并捕获其输出。要让subprocess模块只捕获stdout而不捕获stderr,可以将stderr重定向到stdout。

以下是一个示例代码:

代码语言:txt
复制
import subprocess

def run_command(command):
    # 执行命令并捕获stdout和stderr
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    output, _ = process.communicate()
    return output.decode('utf-8')

# 示例使用
command = 'your_command_here'
output = run_command(command)
print(output)

在上述代码中,subprocess.Popen函数用于执行命令,并通过stdout=subprocess.PIPE参数将stdout捕获到一个管道中。stderr=subprocess.STDOUT参数将stderr重定向到stdout,这样就可以只捕获stdout了。

需要注意的是,subprocess.Popen函数的shell参数设置为True,以便支持执行shell命令。如果要执行的是一个可执行文件,可以将shell参数设置为False

关于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或者腾讯云的产品页面。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python中os.system()、subprocess.run()、call()、check_output()的用法

=True, text=True, # 注意:这里必须 shell=True 才能捕获到 /bin/sh 的输出错误 # 当 shell=False 时,是要去捕获 "abcdefg"...命令自身输出的内容,但是它不存在,python 会报错 stdout=subprocess.PIPE, stderr=subprocess.STDOUT # 标准错误重定向到标准输出) print...("STDOUT:", ret.stdout) # STDOUT: /bin/sh: abcdefg: command not found另一个用于测试 shell 参数区别的示例如下...:这个方法的返回值是命令的退出码,而不是一个对象,所以无法像 subprocess.run() 一样捕获命令输出内容(不要设置 stdout=PIPE 或 stderr=PIPE,否则可能造成命令卡死)...= ["python", sys.argv[0], "--run-child"] ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT

67420
  • 正确的使用python调用shell的姿势

    下面我们看如何使用python与shell交互: 方式一: 使用os.system方法 import osos.system("ls") 保存到一个python文件xxx.py里面执行 python xxx.py...stderr 方式三:看到上面这些这么繁琐的调用,后面就又有了最强大的subprocess模块,subprocess模块的出现是用来替代OS模块中的system()和popen()方法的,官方推荐的是只用...stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexecfn:在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用..., stderr, return_code ok,同样的调用脚本,这个函数会等整个shell执行结束后,输出结果: out, err, code= normal_run_command("sh xs.sh...")print out 至此,我们已经介绍完了如何使用python和shell交互的方式,通过这种方式我们可以很轻松开发一个自动化作业,比如系统参数初始化,使用yum安装各种软件,各种业务项目的部署,启动

    7.5K20

    Python模块之subprocess用法实例详解

    subprocess用来替换多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 运行python的时候,我们都是在创建并运行一个进程,...linux中一个进程可以fork一个子进程,并这个子进程exec另外一个程序。...在python中,我们通过标准库中的subprocess包来fork一个子进程,并且运行一个外部的程序。...二、旧有模块的使用 1.os.system() 执行操作系统的命令,将结果输出到屏幕,返回命令执行状态(0:成功,非 0 : 失败) import os >>> a = os.system("df -...>>> res.stdout.read() b'' #标准错误中有错误信息 >>> res.stderr.read() b'/bin/sh: lm: command not found\n' 注意:上面的提到的标准输出都为啥都需要等于

    25.3K32

    使用python执行shell脚本 并动态传参 及subprocess的使用详解

    这个模块可以非常方便的启动一个子进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None...如果args是一个序列,则第一个项目指定命令字符串,并且任何其他项目将被视为附加的shell参数。 可以先创建一个简单的shell脚本 a.sh 1 2 分别代表传进脚本的 第一个和第二个参数 ?...另外,stderr 可以是STDOUT,它表示应用程序的stderr数据应该被捕获到与stdout相同的文件句柄中。...所有这些外部表示被Python程序视为\ n。注意:此功能仅在Python是使用通用换行支持(默认)构建时才可用。...此外,文件对象stdout,stdin和stderr的newlines属性不会被communications()方法更新。

    5.4K30

    python中的subprocess

    python2.7 源码中的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。...此外,标准错误可以用STDOUT来定义,表明应用程序应该从STDOUT捕获到相同的文件句柄的标准错误数据。 如果preexec_fn设置为一个可调用对象,该对象将在子进程执行之前调用。...在python程序中都是看作为\n 注意: 这种功能仅仅支持用通用换行符构建的python(默认)。同时文件对象标准输出、标准输入、标准错误的换行符属性,不会被communicate()模块所更新。...Example:     check_call(["ls", "-l"]) check_output(*popenargs, **kwargs):     运行带参数的命令并且以字节字符串来返回。    ...=PIPE, stderr=PIPE, close_fds=True) (child_stdin, child_stdout, child_stderr) = (p.stdin, p.stdout

    1.6K30

    python subprocess模块

    subprocess模块 允许你生成一个或多个进程,并且可以跟它交互,并且获取返回的结果,这个模块想要替换掉几个老的方法: os.system os.spawn*...run()方法在python3.5才有,python2.x没有,2.x用subprocess.call(),当然python3.X版本也支持call() 常见的subprocess方法 subprocess.call...terminate() 杀掉所启动进程 communicate() 等待任务结束 stdin 标准输入 stdout 标准输出 stderr 标准错误 pid The process ID...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:在Unix平台下有效...所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

    1K20

    深入理解Node.js的进程与子进程

    从文档出发,管中窥豹,进一步认识和学习 process 模块如何处理命令参数?如何处理工作目录?如何处理异常?如何处理进程退出?...捕获了错误信息,并且进程以0退出。开发者可以在 uncaughtException 事件中,清除一些已经分配的资源(文件描述符、句柄等),不推荐在其中重启进程。...比如前一段代码中,如果出现未被捕获的 promise 回调的异常,那么就会触发 warning 事件。如何处理进程退出?...: ${stdout}`); console.error(`stderr: ${stderr}`);});父子进程通信fork()返回的 ChildProcess 对象,监听其上的 message...默认情况下,子进程的 stdin、 stdoutstderr 会被重定向到 ChildProcess 对象上相应的 subprocess.stdin、subprocess.stdout 和 subprocess.stderr

    1.9K21

    Python模块学习:subprocess模块详解

    它们隐式的调用系统shell,并且不保证其他函数所具有的安全性和异常处理的一致性。另外,它们从Python 3.3.4开始才支持Windows平台。...run()函数默认不会捕获命令执行结果的正常输出和错误输出,如果我们向获取这些内容需要传递subprocess.PIPE,然后可以通过返回的CompletedProcess类实例的stdoutstderr...;check_output()函数默认就会返回命令执行结果,所以不用设置stdout的值,如果我们希望在结果中捕获错误信息,可以执行stderr=subprocess.STDOUT。...如果run()函数被调用时指定stderr=subprocess.STDOUT,那么stdoutstderr将会被整合到这一个属性中,且stderr将会为Nonestderr: 从子进程捕获stderr...stdin, stdout, stderr: 分别表示程序标准输入、输出、错误句柄。preexec_fn: 用于指定一个将在子进程运行之前被调用的可执行对象,在Unix平台下有效。

    53540

    Python远程登陆服务器的最佳实践

    使用 sh.ssh 首先来介绍第一个,sh.ssh sh 是一个可以你通过函数的调用来完成 Linxu/OSX 系统命令的一个库,非常好用,关于它有机会也写篇介绍。...$ python3 -m pip install sh 今天介绍它其中的一个函数:ssh 通常两台机器互访,为了方便,可设置免密登陆,这样就不需要输入密码。...问题就来了,要输入密码,必须得使用交互式的方法来输入呀,在 Python 中要如何实现呢?..., stderr = ssh.exec_command('ls -l') # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read()) # 关闭连接 ssh.close...写在最后 经过了一番对比,和一些实例的展示,可以看出 Paramiko 是一个专业、人省心的 ssh 利器,个人认为 Paramiko 模块是运维人员必学模块之一,如果你恰好需要在 Python 代码中实现

    2.9K20

    python模块之subprocess类与常量

    stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 在一个新的进程中执行子程序...在POSIX系统,shell=True默认使用/bin/sh作为shell。...如果未捕获标准输出返回None stderr捕获的子进程的标准错误,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。...subprocess模块的异常基类 subprocess.TimeoutExpired 子进程执行超时。...属性 cmd:指令 timeout:秒为单位的时间 output:run()或check_output()函数捕获到的子进程的输出,否则为None stdout:output属性别名 stderr:run

    2.4K10

    Python subprocess与命令行交互

    Python subprocess 模块是一个功能强大的库,用于启动和与子流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在的程序运行和等待完成的子进程上。...然后,proc.communicate等待子进程退出并捕获所有的标准输出。 Communicate 有一个非常方便的超时参数,知道子进程是否由于某种原因没有退出。...标准 i/o 意味着可以按行使用(想想所有的 Unix 命令行工具是如何工作的) ; 如果需要子行粒度,stdout 不是正确的方法(使用套接字或其他方法)。...如果不想仅仅打印捕获stdout,而是要对其进行处理(比如寻找预期的模式) ,那么可以使用 Python 的线程安全队列进行组织。...注意,也可以在这里使用communicate,而不是等待来捕获 stderr 输出。 使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

    7.5K22

    Python模块之subprocess

    一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库...二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input...2) 如何处理函数返回的信息(命令执行的结果或者错误信息) 3) 当子进程执行的失败也即returncode不为0时,父进程如何处理后续流程?.../stderr 为None时表示没有任何重定向,继承父进程,还可以设置为PIPE 创建管道/文件对象/文件描述符(整数)/stderr 还可以设置为 STDOUT 后面会给出常见的用法 shell...同样,如果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。

    1.9K10
    领券