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

Python2转Python3报TypeError: a bytes-like object is required, not 'str'问题咨询

错误原因

Python 3中subprocess.check_output默认返回bytes字节串类型,而非Python 2中的字符串类型。你直接对字节串使用字符串类型的'\n'做分割、用" :0"做包含判断,就会触发类型不匹配的报错。

解决方案

有两种常用的修复方式,都可以解决类型不匹配问题:

  • 方案1:给check_output指定编码参数,直接返回字符串类型结果(更推荐,后续无需额外类型转换)
  • 方案2:手动将返回的字节串解码为字符串

注意你最初写的列表推导式存在语法错误:check_output("who".split('\n')括号位置错误,把split操作写到了check_output的参数内部,修正后已将split移到check_output调用的外部。

修正后的代码示例

循环版本

from subprocess import check_output

graphical_users = []
# 方案1 加encoding参数
for line in check_output("who", encoding="utf-8").split('\n'):
    if " :0" in line:
        graphical_users.append(line.split())

# 方案2 手动decode(可选替换方案1的代码)
# for line in check_output("who").decode("utf-8").split('\n'):
#     if " :0" in line:
#         graphical_users.append(line.split())

列表推导式版本

from subprocess import check_output

# 方案1 加encoding参数
graphical_users = [line.split() for line in check_output("who", encoding="utf-8").split('\n') if " :0" in line]

# 方案2 手动decode(可选替换方案1的代码)
# graphical_users = [line.split() for line in check_output("who").decode("utf-8").split('\n') if " :0" in line]

内容的提问来源于stack exchange,提问作者Murphy's_Law_Personified

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:05