0

ASCIIテキストもあるEXE(サイズ2MB)を読んでいます。一致した条件に従ってデータを取得しようとしています。Python 2.6では、次のコードは正常に機能していますが(2秒で結果が得られます)、3.2では機能しません。Python 3.2では、応答なしで永久に実行され続けます。

ありがとう...

match_str = b"sape"
out= ""
try:
    file_obj = open(exe_filePath,'rb')

    while 1:
        data = file_obj.readline(100)

        if data.count(match_str) > 0:               
            out = data.strip()[9:13]                
        if data=="":
            break

    file_obj.close()
    return out
except:
    file_obj.close()
    raise "Some error occurred"
4

1 に答える 1

1
if data=="":
    break

常に失敗します(つまり、break決して起こらないことを意味します)

>>> b"" == ""
False

とオブジェクトですdatabytes

に変更した場合

if data==b"":
    break

動作するはずです。ここで修正する必要のあるものは他にもたくさんありますが(あなたの質問に対する私のコメントを参照してください)。

私はこれを提案します:

match_str = b"sape"
with open(exe_filePath,'rb') as file_obj: 
    while True:
        data = file_obj.readline(100)
        if data.count(match_str) > 0:
            # This will overwrite any previous "out" from the last match!
            # Do you really want that?
            out = data.strip()[9:13]
        if data==b"":
            break
return out
于 2012-06-28T09:44:28.063 に答える