GNU/Linux >> Linux Esercitazione >  >> Linux

File .py importante perso (sovrascritto come file 0byte), ma la vecchia versione è ancora CARICATA IN IPYTHON come modulo:può essere recuperata?

Come notato nei commenti, inspect.getsource non funzionerà perché dipende dal file originale (ad esempio, module.__file__ ).

Opzione migliore:controlla se c'è un .pyc file (es, foo.pyc dovrebbe essere accanto a foo.py ). Se c'è, puoi usare Decompile Python 2.7 .pyc per decompilarlo.

Il inspect i moduli memorizzano anche nella cache l'origine. Potresti essere fortunato e usare inspect.getsource(module) o inspect.getsourcelines(module.function) se è stato chiamato in passato.

Altrimenti dovrai ricostruire il modulo "manualmente" ispezionando le esportazioni (ad esempio, module.__globals__ ). Le costanti e quant'altro sono ovvie, e per le funzioni puoi usare func.func_name per ottenere il suo nome, func.__doc__ per ottenere la docstring, inspect.getargspec(func) per ottenere gli argomenti e func.func_code per ottenere dettagli sul codice:co_firstlineno otterrà il numero di riga, quindi co_code otterrà il codice. C'è di più sulla decompilazione qui:Exploring and decompiling python bytecode

Ad esempio, per utilizzare 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!'

Ma no, non sono a conoscenza di un metodo più diretto per prendere un modulo e recuperare il codice sorgente.


Linux
  1. Come ottenere in sicurezza la versione di Ksh?

  2. Acquista ora la vecchia versione di Windows e ricevi comunque l'aggiornamento gratuitamente?

  3. Come posso ottenere la quantità di memoria disponibile in modo portabile tra le distribuzioni?

  4. Come posso ottenere un binario da un file .py

  5. Come ottenere la dimensione fisica di un file in Linux?

È possibile recuperare i file sovrascritti?

Python:nessun file o directory del genere ma posso vederlo!?

Come posso trovare la versione di Fedora che uso?

Come ottenere la dimensione di tar.gz nel file (MB) in python

JAVA_HOME e PATH sono impostati ma java -version mostra ancora quello vecchio

Come posso ottenere la lunghezza di un file video dalla console?