1

私はもともとこのコードをPython2.7に通しましたが、作業のためにPython3.xに移行する必要がありました。私はこのコードをPython3.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 3はbytes、エンコーディングが明確に定義されていない多くの場所で型を使用します。サブプロセスのstdoutは、バイトデータを処理するファイルオブジェクトです。したがって、bytesオブジェクト内に文字列があるかどうかを確認することはできません。例:

>>> '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 に答える