GNU/Linux >> Linux の 問題 >  >> Linux

重要な .py ファイル (0byte ファイルとして上書き) を失いましたが、古いバージョンはまだモジュールとして IPYTHON にロードされています -- 取得できますか?

コメントにあるように、 inspect.getsource 元のファイル (つまり、module.__file__) に依存するため、機能しません。 ).

最良の選択肢:.pyc があるかどうかを確認する ファイル (例:foo.pyc foo.py の横にある必要があります )。ある場合は、Decompile Python 2.7 .pyc を使用して逆コンパイルできます。

inspect モジュールもソースをキャッシュします。運が良ければ inspect.getsource(module) を使用できるかもしれません 、または inspect.getsourcelines(module.function) 過去に呼び出された場合。

それ以外の場合は、エクスポートを調べてモジュールを「手動で」再構築する必要があります (つまり、module.__globals__ )。定数などは明らかで、関数には func.func_name を使用できます その名前を取得するには func.__doc__ docstring inspect.getargspec(func) を取得するには 引数を取得し、func.func_code コードの詳細を取得するには:co_firstlineno 行番号を取得し、次に co_code を取得します コードを取得します。ここに逆コンパイルの詳細があります:Python バイトコードの探索と逆コンパイル

たとえば、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!'

しかし、いいえ — モジュールを取得してソース コードを元に戻す、これ以上簡単な方法を私は知りません。


Linux
  1. .gzファイルを解凍してテキストファイルを取得しますが、バイナリファイルを取得しますか?

  2. 使用している Fedora のバージョンを確認するにはどうすればよいですか?

  3. Linuxでキーボードの状態を取得するにはどうすればよいですか?

  1. Pythonで(MB)ファイルのtar.gzのサイズを取得する方法

  2. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  3. `less` または `more` を使用してファイルを読み取る場合、コンテンツをカラーで取得するにはどうすればよいですか?

  1. iwlwifi のマイクロコード (ucode) を解析してバージョン番号を取得するにはどうすればよいですか?

  2. .py ファイルからバイナリを取得するにはどうすればよいですか

  3. Linuxでファイルの物理サイズを取得するには?