Pythonのお勉強 Part6
■ このスレッドは過去ログ倉庫に格納されています
0169159
2005/04/26(火) 22:09:28僕も似たような事いい残して海外へいってしまった経験ありだったりして。# 耳が痛い
オンラインドキュメントだけでも十分、独習出来るだけのリソースがあるので、
自分がいなくてもなんとかなるだろうと打算してました。
marshalは、コンパイルされたPythonのデータ(codeオブジェクト)を
ファイルに保存したりする為に、バイナリデータへ変換する為のモジュールです。
バイトコードについて細かい事言えば、
>>159では説明不足/間違ってるので、>>160の為に詳細
> import dis, marshal
> pyc = open("hoge.pyc", "rb")
> pyc.seek(8)
> code = marshal.load(pyc) # <-- codeオブジェクト
> code.co_code # <-- これがバイトコード(文字列として格納されているがバイナリーデータ)で
> dis.dis(code) # <-- ここで表示されるのがバイトコードをdisassembleしたコード
> exec code # codeを実行
ついでに、先頭の8バイトはそれぞれ、
マジックナンバー(4byte) と タイムスタンプ(4byte unsigned int)
> import imc, time, struct
> pyc.seek(0, 0)
> pyc.read(4) # コンパイルした環境の img.get_magic() と同じ値。version毎/Unicodeサポートのon/offにより異なる
> time.ctime(struct.unpack("<i", pyc.read(4))[0]) # ソースファイルの最終更新日時
Pythonのソース(文字列)からcodeオブジェクトにコンパイルするには、
ビルトイン関数やcompiler モジュールのcompile関数が使えます。
■ このスレッドは過去ログ倉庫に格納されています