GNU/Linux >> Tutoriels Linux >  >> Linux

Fichier .py important perdu (écrasé en tant que fichier 0 octet), mais l'ancienne version est toujours CHARGÉE DANS IPYTHON en tant que module - peut-elle être récupérée ?

Comme indiqué dans les commentaires, inspect.getsource ne fonctionnera pas car cela dépend du fichier d'origine (c'est-à-dire module.__file__ ).

Meilleure option :vérifiez s'il y a un .pyc fichier (ex, foo.pyc devrait être à côté de foo.py ). Si c'est le cas, vous pouvez utiliser Decompile Python 2.7 .pyc pour le décompiler.

Le inspect modules met également en cache la source. Vous pourrez peut-être avoir de la chance et utiliser inspect.getsource(module) , ou inspect.getsourcelines(module.function) s'il a été appelé dans le passé.

Sinon, vous devrez reconstruire le module "manuellement" en inspectant les exportations (c'est-à-dire module.__globals__ ). Les constantes et autres sont évidentes, et pour les fonctions, vous pouvez utiliser func.func_name pour obtenir son nom, func.__doc__ pour obtenir la docstring, inspect.getargspec(func) pour obtenir les arguments, et func.func_code pour obtenir des détails sur le code :co_firstlineno obtiendra le numéro de ligne, puis co_code obtiendra le code. Il y a plus sur la décompilation ici :Explorer et décompiler le bytecode Python

Par exemple, pour utiliser 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!'

Mais non - je ne connais aucune méthode plus simple pour prendre un module et récupérer le code source.


Linux
  1. Les fichiers écrasés peuvent-ils être récupérés ?

  2. Comment obtenir en toute sécurité la version de Ksh ?

  3. Python - Aucun fichier ou répertoire de ce type, mais je peux le voir ! ?

  4. Comment puis-je obtenir la quantité de mémoire disponible de manière portable entre les distributions ?

  5. Comment puis-je obtenir un binaire à partir d'un fichier .py

Comment puis-je obtenir la résolution (largeur et hauteur) d'un fichier vidéo à partir d'une ligne de commande Linux ?

Comment puis-je obtenir l'état du clavier sous Linux?

Comment obtenir la taille de tar.gz dans le fichier (Mo) en python

JAVA_HOME et PATH sont définis mais java -version affiche toujours l'ancien

Lors de la lecture d'un fichier avec "moins" ou "plus", comment puis-je obtenir le contenu en couleurs ?

Comment puis-je obtenir la longueur d'un fichier vidéo à partir de la console ?