当前位置: 首页 > 面试题库 >

子进程,类型Str不支持缓冲区API

朱昊乾
2023-03-14
问题内容

我有

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

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

我在做错什么我在Python 3.3上


问题答案:

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

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或更高版本,则可以encodingPopen()调用使用显式参数,以指定要使用的其他编解码器,例如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,只需从字节中显式解码文本即可。

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

>>> 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代码给了我以下错误: 问题答案: 如果使用Python3x,则与Python 2.x的类型不同,则必须将其转换为字节(对其进行编码)。 也不要使用像string或那样的变量file名作为模块或函数的名称。 是的,非ASCII文本也会被压缩/解压缩。我使用UTF-8编码的波兰字母:

  • mimeType String - 要发送的缓冲区的mimeType data Buffer - 实际的Buffer内容

  • 问题内容: 每当我运行这个程序我都会得到这个 我该怎么做才能将pyc除以tpy? 问题答案: 通过将它们变成整数: 在python 3中,该函数返回一个字符串。总是。这是对Python 2的更改;该功能已重命名为。

  • 环型缓冲区是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。 构造环型缓冲区 var ringBuffer = new RingBufferStream(); 函数原型 RingBufferStream(int capacity = 8192, bool exposable = true); 参数 描述 capacity 环状缓冲区的最大容量,为2的次方。如:传入12,则

  • 问题内容: python中有一个类型,但是我不知道该如何使用它。 在Python文档中,描述为: object参数必须是支持缓冲区调用接口的对象(例如字符串,数组和缓冲区)。将创建一个引用该对象参数的新缓冲区对象。缓冲区对象将从对象的开头(或指定的偏移量)开始是一个切片。切片将延伸到对象的末尾(或具有由size参数指定的长度)。 问题答案: 用法示例: 在这种情况下,缓冲区是一个子字符串,从位置6

  • 问题内容: 我试图像这样制作垂直的seaborn boxplot 我得到 我写东方 并得到 但 作品coreect!怎么了? 问题答案: 对于Seaborn的箱形图,在水平和垂直对齐方式之间切换时,请务必注意x轴和y轴的分配: 混淆列会导致seaborn尝试计算分类数据框中的摘要统计信息,这肯定会失败。