您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何抑制或捕获subprocess.run()的输出?

如何抑制或捕获subprocess.run()的输出?

这是按清洁度递减的顺序 抑制 输出方法。他们假设您使用的是Python 3。

您可以重定向到特殊subprocess.DEVNULL目标。

import subprocess

subprocess.run([‘ls’, ‘-l’], stdout=subprocess.DEVNULL)

subprocess.run([‘ls’, ‘-l’], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

subprocess.run([‘ls’, ‘-l’], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

如果要使用完全手动的方法,可以/dev/null自己打开文件句柄来重定向到。其他所有内容都与方法1相同。

import os import subprocess

with open(os.devnull, ‘w’) as devnull: subprocess.run([‘ls’, ‘-l’], stdout=devnull)

以下是按清洁度递减的顺序 捕获 输出(以供以后使用或解析)的方法。他们假设您使用的是Python 3。

如果您只是想同时捕获STDOUT和STDERR,并且您使用的是Python> = 3.7,请使用capture_output=True

import subprocess

result = subprocess.run([‘ls’, ‘-l’], capture_output=True) print(result.stdout) print(result.stderr)

您可以用来subprocess.PIPE独立捕获STDOUT和STDERR。这 确实 对Python版本<3.7,如Python 3.6的工作。

import subprocess

result = subprocess.run([‘ls’, ‘-l’], stdout=subprocess.PIPE) print(result.stdout)

result = subprocess.run([‘ls’, ‘-l’], stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(result.stdout) print(result.stderr)

result = subprocess.run([‘ls’, ‘-l’], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) print(result.stdout)

认情况下,捕获的输出返回为bytes。如果要捕获为文本(例如str),请使用universal_newlines=True(或在Python> = 3.7上,使用无限清晰和易于理解的选项text=True-相同,universal_newlines名称不同)。

其他 2022/1/1 18:25:16 有354人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶