Python 3.2 TypeError - 无法弄清楚它的含义

时间:2013-02-25 01:35:56

标签: python-3.x

我最初将此代码放在Python 2.7中,但由于工作需要转移到Python 3.x.我一直试图弄清楚如何让这个代码在Python 3.2中运行,没有运气。

import subprocess
cmd = subprocess.Popen('net use', shell=True, stdout=subprocess.PIPE)
for line in cmd.stdout:
    if 'no' in line:
        print (line)

我收到此错误

if 'no' in (line):
TypeError: Type str doesn't support the buffer API

任何人都可以向我提供一个答案,说明为什么要这样做和/或要阅读一些文档?

非常感谢。

1 个答案:

答案 0 :(得分:1)

Python 3在许多没有明确定义编码的地方使用bytes类型。子进程的stdout是使用字节数据的文件对象。因此,您无法检查字节对象中是否存在某些字符串,例如:

>>> 'no' in b'some bytes string'
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    'no' in b'some bytes string'
TypeError: Type str doesn't support the buffer API

如果字节字符串包含另一个 bytes 字符串,则需要做的是测试:

>>> b'no' in b'some bytes string'
False

所以,回到你的问题,这应该有效:

if b'no' in line:
    print(line)