GNU/Linux >> Belajar Linux >  >> Linux

Kehilangan file .py penting (ditimpa sebagai file 0byte), tetapi versi lama masih DIMUAT DI IPYTHON sebagai modul -- dapatkah diambil kembali?

Seperti disebutkan dalam komentar, inspect.getsource tidak akan berfungsi karena bergantung pada file asli (mis., module.__file__ ).

Opsi terbaik:periksa apakah ada .pyc file (mis., foo.pyc harus di samping foo.py ). Jika ada, Anda dapat menggunakan Dekompilasi Python 2.7 .pyc untuk mendekompilasinya.

inspect modules juga menyimpan cache sumbernya. Anda mungkin beruntung dan menggunakan inspect.getsource(module) , atau inspect.getsourcelines(module.function) jika telah dipanggil di masa lalu.

Jika tidak, Anda harus membangun kembali modul "secara manual" dengan memeriksa hasil ekspor (mis., module.__globals__ ). Konstanta dan yang lainnya sudah jelas, dan untuk fungsi Anda dapat menggunakan func.func_name untuk mendapatkan namanya, func.__doc__ untuk mendapatkan docstring, inspect.getargspec(func) untuk mendapatkan argumen, dan func.func_code untuk mendapatkan detail tentang kode:co_firstlineno akan mendapatkan nomor baris, lalu co_code akan mendapatkan kode. Ada lebih banyak tentang dekompilasi di sini:Menjelajahi dan mendekompilasi bytecode python

Misalnya untuk menggunakan uncompyle2 :

>>> def foo():
...     print "Hello, world!"
...
>>> from StringIO import StringIO
>>> import uncompyle2
>>> out = StringIO()
>>> uncompyle2.uncompyle("2.7", foo.func_code, out=out)
>>> print out.getvalue()
print 'Hello, world!'

Namun, tidak — saya tidak mengetahui metode langsung lainnya untuk mengambil modul dan mengeluarkan kembali kode sumbernya.


Linux
  1. Bisakah File yang Ditimpa Dipulihkan?

  2. Python – Tidak Ada File Atau Direktori Seperti Itu Tapi Saya Bisa Melihatnya!?

  3. Dapatkan Semua File Tapi File Dalam Array – Bash?

  1. Bagaimana cara menemukan versi Fedora yang saya gunakan?

  2. Bagaimana saya bisa mendapatkan status keyboard di Linux?

  3. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  1. Bagaimana cara mendapatkan direktori absolut dari sebuah file di bash?

  2. Saat membaca file dengan `kurang` atau `lebih`, bagaimana saya bisa mendapatkan konten berwarna?

  3. Bagaimana saya bisa mendapatkan jumlah memori yang tersedia secara portabel di seluruh distribusi?