我最初将此代码放在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
任何人都可以向我提供一个答案,说明为什么要这样做和/或要阅读一些文档?
非常感谢。
答案 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)