1

我最初将这段代码放在 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

谁能回答我为什么会这样和/或一些要阅读的文档?

非常感激。

4

1 回答 1

1

Python 3bytes在很多没有明确定义编码的地方都使用了该类型。您的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

您需要做的是测试字节字符串是否包含另一个字节字符串:

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

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

if b'no' in line:
    print(line)
于 2013-02-25T01:44:07.857 回答