2016-06-17 3 views
1

Я получаю это, когда пытаюсь запустить код NUT_check.py, и это происходит из строки 69. Я очень не уверен в том, что происходит поскольку я сам не делал этот код, и я действительно не использовал Python. Строка 69 заканчивается линией дефиса, чтобы отметить ееTypeError: необходим байтовый объект, а не 'str' для кода Python

import sys 
import struct 
from struct import pack 
import os 
from util import * 
import string 
import math 

nut = open(sys.argv[1], "rb+") 

NTWU = readu32be(nut) 
Version = readu16be(nut) 
fileTotal = readu16be(nut) 
nut.seek(0x10) 
paddingFix = 0 
for i in range(fileTotal): 
    if i > 0: 
      paddingFix = paddingFix + headerSize 
    fullSize = readu32be(nut) 
    nut.seek(4,1) 
    size = readu32be(nut) 
    headerSize = readu16be(nut) 
    nut.seek(2,1) 
    mipsFlag = readu16be(nut) 
    gfxFormat = readu16be(nut) 
    if NTWU == 0x4E545755: 
      width = readu16be(nut) 
      height = readu16be(nut) 
    if NTWU == 0x4E545033: 
      width2 = readByte(nut) 
      width1 = readByte(nut) 
      height2 = readByte(nut) 
      height1 = readByte(nut) 
    numOfMips = readu32be(nut) 
    nut.seek(4,1) 
    offset1 = (readu32be(nut) + 16) 
    offset2 = (readu32be(nut) + 16) 
    offset3 = (readu32be(nut) + 16) 
    nut.seek(4,1) 
    if headerSize == 0x60: 
      size1 = readu32be(nut) 
      nut.seek(12,1) 
    if headerSize == 0x70: 
      size1 = readu32be(nut) 
      nut.seek(0x1C,1) 
    if headerSize == 0x80: 
      size1 = readu32be(nut) 
      nut.seek(0x2C,1) 
    if headerSize == 0x90: 
      size1 = readu32be(nut) 
      nut.seek(0x3C,1) 
    eXt = readu32be(nut) 
    nut.seek(12,1) 
    GIDX = readu32be(nut) 
    nut.seek(6,1) 
    skinNum = readByte(nut) 
    fileNum = readByte(nut) 
    nut.seek(4,1) 
    print("Slot Number %i Texture id %s,%i has %i mipmaps. Format is %i" % (skinNum/4,hex(fileNum),fileNum,mipsFlag,gfxFormat)) 
    if i == 0: 
      offsetHeader = offset3 
    if i > 0: 
      offset1 += paddingFix 
      offsetHeader += 0x80 
    backNTime = nut.tell() 
    nut.seek(offsetHeader) 
    fileStr = ("%d" % fileNum) 
    outfile = open("Convert" + "/" + fileStr + ".gtx", "wb") 
    outfile.write("\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00") ---------------------------------------------- 
    outfile.write(nut.read(0x80)) 
    outfile.write("\x00\x00\x00\x01\x00\x01\x02\x03\x1F\xF8\x7F\x21\xC4\x00\x03\xFF\x06\x88\x80\x00\x00\x00\x00\x0A\x80\x00\x00\x10\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0C\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") 
    outfile.seek(0x50) 
    outfile.write(struct.pack(">I",1)) 
    outfile.seek(0xf0) 
    outfile.write(struct.pack(">I",size)) 
    outfile.seek(8,1) 
    nut.seek(offset1) 
    outfile.write(nut.read(size)) 
    outfile.write("\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") 
    outfile.close() 
    nut.seek(backNTime) 
nut.close() 
+0

Пожалуйста, попробуйте отправить полное сообщение об ошибке и попробуйте отладки программы самостоятельно, прежде чем спрашивать других. Включите также свои усилия по отладке. – Li357

+0

Весь ваш вопрос может быть сведен к минимуму до простого 'open()', за которым следует 'write()' в строке 69. – rrauenza

+0

Возможно, вы пытаетесь запустить код Python 2 в Python 3. – immibis

ответ

1

Я подозреваю, что вы используете python3 вместо python2. Если вы будете продолжать использовать python3, попробуйте изменить двоично-иш строковые константы с префиксом b:

>>> outfile = open("/tmp/foo", "wb") 
>>> outfile.write("\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'str' does not support the buffer interface 
>>> outfile.write(b"\x47\x66\x78\x32\x00\x00\x00\x20\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x4C\x4B\x7B\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x9C\x00\x00\x00\x00\x00\x00\x00\x00") 
64 
>>> 
Смежные вопросы