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

如何打印和显示subprocess stdout和stderr输出而不失真?

在Python中,您可以使用subprocess模块来运行外部命令并获取stdoutstderr输出。为了避免信息丢失或混乱,您可以使用subprocess.PIPE作为输出的缓冲区,并在需要时将其传递给sys.stdoutsys.stderr。以下是一个示例代码:

代码语言:python
代码运行次数:0
复制
import subprocess
import sys

# 运行外部命令
cmd = "your_command_here"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 获取stdout和stderr输出
stdout, stderr = process.communicate()

# 打印stdout和stderr输出
sys.stdout.write(stdout.decode('utf-8'))
sys.stderr.write(stderr.decode('utf-8'))

在这个示例中,我们首先导入subprocesssys模块。然后,我们使用subprocess.Popen运行外部命令,并将stdoutstderr设置为subprocess.PIPE。这样,我们就可以在需要时将它们传递给sys.stdoutsys.stderr。最后,我们使用sys.stdout.writesys.stderr.write来打印这些输出。

请注意,这个示例仅适用于Python。如果您需要在其他编程语言中实现类似的功能,请查阅相应语言的文档。

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

相关·内容

Python subprocess与命令行交互

Python subprocess 模块是一个功能强大的库,用于启动与子流程交互。 它附带了一些高级 api,比如调用、检查输出运行,这些都集中在的程序运行等待完成的子进程上。...获得所有输出时完成 第一个最简单的用例是启动一个 HTTP 服务器,与它交互,干净利落地终止它,并在完成后获取所有服务器的 stdout stderr。...启动,交互,实时输出,终止 一个相关的用例是以“实时”方式获取子进程的标准输出不是在最后将所有内容放在一起。 在这里,必须非常小心缓冲,因为它很容易导致程序崩溃死锁。...线程会轮询子标准输出属性,只要有新行可用,就会循环并立即打印它们。 如果运行这个示例,您将注意到子进程的 stdout 是实时报告的,不是在最后报告一个错误。...注意,也可以在这里使用communicate,不是等待来捕获 stderr 输出。 使用非阻塞读线程可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

7.6K22

subprocess:Python中创建子进程

,我们打印123。...对于run()函数启动的进程,它的标准输入输出通道会绑定到父进程的输入输出。这说明调用程序无法捕获命令的输出。不过,我们可以通过为stdoutstderr参数传入PIPE来捕获输出,以备以后处理。...命令将错误消息返回了。这是因为我们设置了stdoutstderrsubprocess.PIPE,表明这些通道要开放。这样我们才能获取子shell运行的结果获取所运行的错误提示。...这就是subprocess库创建进程的通信机制) 需要注意的是,如果需要抑制输出效果,可以将stdoutstderr设置为subprocess.DEVNULL。...比如run(),call(),check_call()check_output()函数都是Popen类的包装器。直接使用Popen可以更好的控制如何运行命令以及如何处理输入输出流。

52470
  • Python调用外部系统命令

    某些场景调用外部命令就是为获取输出结果,也可以通过输出结果来判断命令执行成功还是失败。分析结果如下:图片下面再针对每一个函数使用方法实例进行详细描述。...stdin、stdoutstdout 分别表示标准输入、标准输出标准错误。其值可以为PIPE、文件描述符None等。默认值为None,表示从父进程继承。...Popen对象对应的属性方法如下:属性: stdin, stdout, stderr, pid, returncode方法: communicate(self, input=None) -> returns...', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)p.wait()print (p.stdout.read...调用外部系统命令,返回命令结果码,但是无法获取命令执行输出结果,输出结果直接打印到屏幕终端。

    26720

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

    1.os.system()os.system() 是对 C 语言中 system() 系统函数的封装,允许执行一条命令,并返回退出码(exit code),命令输出的内容会直接打印到屏幕上,无法直接获取..., stderr: 用于指定标准IO文件句柄,可以是: subprocess.PIPE: 用作 stdout, stderr 参数的值时,可以从返回值对象中的 stdout stderr...stderr 参数的值时,相当于把输出内容重定向到 /dev/null 用户已经打开的文件对象或描述符(整型数字)capture_output: 当设置为 True 时,相当于 stdout ...:这个方法的返回值是命令的退出码,不是一个对象,所以无法像 subprocess.run() 一样捕获命令输出内容(不要设置 stdout=PIPE 或 stderr=PIPE,否则可能造成命令卡死)...) print("[" + ret + "]") # 输出内容中包含标准输出标准错误,输出顺序在 windows 下 linux 下可能会有差异 assert re.search("stdout

    73520

    Python Subprocess库详解

    简介 Subprocess库是Python中用于创建和管理子进程的标准库。它提供了一个强大灵活的接口,使得你可以在Python中启动新的进程、连接它们的输入输出,并与它们进行交互。...可以使用stdout=subprocess.PIPEstderr=subprocess.PIPE参数,并通过communicate()实时获取输出: pythonCopy codeimport subprocess...使用subprocess.DEVNULL避免输出 如果你不关心子进程的输出,可以将stdoutstderr参数设置为subprocess.DEVNULL。..., stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) 在这个例子中,subprocess.DEVNULL将子进程的标准输出标准错误输出都重定向到空设备...使用subprocess.Popen的stdoutstderr参数进行输出流重定向 subprocess.Popen的stdoutstderr参数允许你将子进程的标准输出标准错误输出重定向到文件或其他地方

    2.3K21

    pip卸载所有包_pip导出包

    为了方便,第三问题使用 subprocess.run 解决。 网上已经有好多文章都对 subprocess.Popen subprocess.run 的参数进行解释,这里不多赘述。...对于 subprocess.Popen ,除了要执行的命令外,我只设置了 stdin、stdoutstderr 参数。...capture_output ,设置是否显示命令执行结果,True 显示,否则不显示。 input ,这个是关键,使得代码可以与命令行进行交互,即指定命令后,在命令行输入内容执行。...(f'pip show { name}', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 如果没有安装该包...字符串 ,如果没有指定 encoding 参数的话,默认是使用 gbk 编码,如果环境中的编码方式不一致的话会导致编码报错。

    2.4K10

    python的subprocess模块

    stdout, stderr: run()函数默认不会捕获命令执行结果的正常输出错误输出,如果我们向获取这些内容需要传递subprocess.PIPE,然后可以通过返回的CompletedProcess...类实例的stdoutstderr属性或捕获相应的内容; ​ call()check_call()函数返回的是命令执行的状态码,不是CompletedProcess类实例,所以对于它们而言,stdout...universal_newlines: 该参数影响的是输入与输出的数据格式,比如它的值默认为False,此时stdoutstderr输出是字节序列;当该参数的值设置为True时,stdoutstderr...如果run()函数被调用时指定 ​ ​stderr=subprocess.STDOUT,那么stdoutstderr将会被整合到这一个属性中,且stderr将会为None stderr: 从子进程捕获的...直接使用Popen会对如何运行命令以及如何处理其输入输出有更多控制。如通过为stdin, stdoutstderr传递不同的参数。

    3K20

    Python,Shell 三个标准文件

    100% 需求了,如果没有请留言区留言 ---- 预备 执行一个 Shell 命令行时通常会自动打开三个标准文件,即: 标准输入文件(stdin),通常对应终端的键盘 标准输出文件(stdout)..., shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()...从 stdout stderr 文件中读取数据,直到达到文件结尾。等待进程终止。可选的 input 参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为 None。...communicate() 返回一个元组 (stdout, stderr)。 例子中我们并没有显式的指定 input 参数,默认为 None,我们只从 stdin stderr 文件中读取数据。...那么类似这种持续输出结果的命令如何执行呢?

    1.4K60

    python中执行DOS命令的3种方法小

    Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数模式。使用前需要from subprocess import Popen, PIPE。...参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。...subprocess.PIPE 在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdoutstderr参数,表示与子进程通信的标准流。...subprocess.STDOUT 创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出输出。 Popen的方法: Popen.poll()  用于检查子进程是否已经结束。...同样,如 果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。 Popen.send_signal(signal)  向子进程发送信号。

    2.2K20

    pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)

    经过研究,上结论: os.popen 会打开一个管道执行命令,管道是有输入(stdin)、输出(stdout) 的!...stdin、stdoutstderr分别表示子程序的标准输入、标准输出标准错误。 可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。...另外,stderr的值还可以是STDOUT,表示子进程的标准错误也输出到标准输出。 如果把preexec_fn设置为一个可调用的对象(比如函数),就会在子进程被执行前被调用。...subprocess.STDOUT 一个可以被用于Popen的stderr参数的特殊值,表示子程序的标准错误与标准输出汇合到同一句柄。...stderr=subprocess.STDOUT, stdin=subprocess.PIPE ) ret = proc.wait() # 此处其实有返回值 with open('输出文件.

    3.8K30

    解决libsubprocess.py, line 997, in _execute_child startupinfo) FileNotFoundError

    它提供了一个简单强大的接口,使得在Python中执行外部命令、脚本以及调用其他可执行文件变得更加容易。 ​​​subprocess​​​模块提供了多个函数来执行外部命令控制启动的子进程。...以下是一些常用的​​subprocess​​函数:​​subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None,...可以通过​​args​​参数传递命令参数,​​shell​​参数用于指示是否要在shell中执行命令,​​stdout​​​​stderr​​参数可以用于指定输出错误输出的处理方式。​​...通过使用​​subprocess​​模块,我们可以轻松地在Python中执行外部命令,获取其输出,控制输入输出流,以及处理错误。...总结一下,​​subprocess​​是Python标准库中用于处理外部进程的模块,提供了多个函数类,用于执行外部命令、控制输入输出流、以及处理执行结果等。

    83320

    python模块之subprocess模块级方法

    capture_output:如果设置为True,表示重定向stdoutstderr到管道,且不能再传递stderrstdout参数,否则抛出异常。...非None的input参数不能stdin参数一起使用,否则将抛出异常,构造Popen实例的stdin参数将指定为subprocess.PIPE。...调用call()函数不要使用stdout=PIPE或stderr=PIPE,因为如果子进程生成了足量的输出到管道填满OS管道缓冲区,子进程将因不能从管道读取数据导致阻塞。...要在返回值中捕获标准错误,设置stderr=subprocess.STDOUT;也可以将标准错误重定向到管道stderr=subprocess.PIPE,通过CalledProcessError异常的stderr...,output(包含stderrstdout)是使用locale encoding解码的字符串,并删除了结尾的换行符。

    2.3K20

    Python用subprocess的Popen来调用系统命令

    參数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们能够是PIPE,文件描写叙述符或文件对象,也能够设置为None,表示从父进程继承。...subprocess.STDOUT 创建Popen对象时,用于初始化stderr參数,表示将错误通过标准输出输出。 Popen的方法: Popen.poll() 用于检查子进程是否已经结束。...向stdin发送数据,或从stdoutstderr中读取数据。可选參数input指定发送到子进程的參数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。...相同,如 果希望从stdoutstderr获取数据,必须将stdoutstderr设置为PIPE。 Popen.send_signal(signal) 向子进程发送信号。...,运行加操作,并将结 果打印到控制台上。

    1.8K20
    领券