gpt4 book ai didi

python - subprocess 和 Type Str 不支持缓冲区 API

转载 作者:IT老高 更新时间:2023-10-28 20:47:26 26 4
gpt4 key购买 nike

我有

cmd = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
for line in cmd.stdout:
columns = line.split(' ')
print (columns[3])

第 3 行出现错误 Type Str 不支持缓冲区 API。

我在 Python 3.3 上做错了什么

最佳答案

您正在读取二进制数据,而不是 str,因此您需要先对输出进行解码。如果将 universal_newlines 参数设置为 True,则使用 locale.getpreferredencoding() method 的结果自动解码 stdout (与打开文本文件相同):

cmd = subprocess.Popen(
'dir', shell=True, stdout=subprocess.PIPE, universal_newlines=True)
for line in cmd.stdout:
columns = line.decode().split()
if columns:
print(columns[-1])

如果您使用 Python 3.6 或更新版本,您可以对 Popen() 调用使用显式 encoding 参数来指定要使用的不同编解码器,例如例如,UTF-8:

cmd = subprocess.Popen(
'dir', shell=True, stdout=subprocess.PIPE, encoding='utf8')
for line in cmd.stdout:
columns = line.split()
if columns:
print(columns[-1])

如果您需要在 Python 3.5 或更早版本中使用不同的编解码器,请不要使用 universal_newlines,只需从字节中显式解码文本即可。

您试图使用 str 参数拆分 bytes 值:

>>> b'one two'.split(' ')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Type str doesn't support the buffer API

通过解码,您可以避免该问题,并且您的 print() 调用也不必在输出前加上 b'..'

但是,您可能只想使用 os 模块来获取文件系统信息:

import os

for filename in os.listdir('.'):
print(filename)

关于python - subprocess 和 Type Str 不支持缓冲区 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com