2016-04-08 33 views
1

.pyc dosyasını okumak istiyorum. Ancak, formatta herhangi bir belge bulamıyorum.Python 3 bytecode biçimi

only one I found Python 3 (Python 2 için yapar rağmen) için çalışmıyor: \x00, gerçekten de bir karşılaştırma olarak (Marshall'a için geçerli bir ilk karakter değil:

>>> f = open('__pycache__/foo.cpython-34.pyc', 'rb') 
>>> f.read(4) 
b'\xee\x0c\r\n' 
>>> f.read(4) 
b'\xf8\x17\x08W' 
>>> marshal.load(f) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: bad marshal data (unknown type code) 

mareşal tek bayt tüketir , aynı boş modül için Python 2 bayt kodunun ilk bayt değeri c)

Başlığın ardından gelenleri nasıl çözebilirim?

+0

+ değil 8 ilk bayt okuma gerekir, ancak 12. burada http://stackoverflow.com/a/42720524/6003870 benim cevap Oku –

cevap

3

Bunu deneyin. Bir süre önce çalıştı. V3'te başka bir int32 eklediler.

def load_file(self, source): 
    if isinstance(source, str): 
     import os.path 
     if not os.path.exists(source): 
      raise IOError("Cannot load_file('" 
       + source 
       + "'): does not exist") 
     with open(source, "rb") as fh: 
      header_bytes = fh.read(12) 
      # ignore header 
      self.code = marshal.load(fh) 

     return self.code 
versiyonu Pytho3.3 itibaren
+0

Bu normal bir işlev ("self" olmadan) olması gerektiği gibi görünüyor. – pylang