You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Subprocess.communicate()的输出类型及返回场景说明

subprocess.Popen.communicate() 返回类型说明

返回字符串输出的场景

当子进程的流以文本模式打开时,communicate() 返回字符串类型的输出。可通过以下两种方式启用文本模式:

  • 设置 universal_newlines=True(兼容Python旧版本)
  • 设置 text=True(Python 3.7+ 推荐用法)

示例代码

import subprocess

# 使用 universal_newlines=True 启用文本模式
p = subprocess.Popen('echo hello', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
r, e = p.communicate()
print(type(r))  # 输出: <class 'str'>

# 使用 text=True 启用文本模式(Python3.7+)
p = subprocess.Popen('echo hello', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, text=True)
r, e = p.communicate()
print(type(r))  # 输出: <class 'str'>

返回字节类型输出的场景

未设置文本模式相关参数时,流默认以二进制模式打开,此时 communicate() 返回字节类型的输出。

示例代码

import subprocess

# 默认二进制模式,不设置 universal_newlines 或 text 参数
p = subprocess.Popen('echo hello', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
r, e = p.communicate()
print(type(r))  # 输出: <class 'bytes'>

官方文档说明(翻译版)

Popen.communicate(input=None, timeout=None)
与进程交互:向标准输入发送数据。从标准输出和标准错误读取数据,直到到达文件末尾。等待进程终止并设置returncode属性。可选的input参数是要发送给子进程的数据,若无需发送则为None。如果流以文本模式打开,input必须是字符串;否则必须是字节类型。

communicate() 返回一个元组 (stdout_data, stderr_data)。如果流以文本模式打开,返回的数据为字符串;否则为字节类型。

内容的提问来源于stack exchange,提问作者bad_coder9042093

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:17:14