我有
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或更高版本,则可以encoding
对Popen()
调用使用显式参数,以指定要使用的其他编解码器,例如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尝试计算分类数据框中的摘要统计信息,这肯定会失败。