2016-05-13 5 views
0

私はたくさんのスクリプトを実行し、通常はその結果をMongoDBに保存します。結果を入力スクリプトとリンクできるように、スクリプト全体をテキストとして保存します。混乱でPythonの2つの結果に同じトリックを適用する* .pyスクリプトを文字列に変換する

module = importlib.import_module(module) 
    with open(module.__file__) as ff: 
     source = ff.read() 

:これは以下のコードを使ってPython 3に美しく動作します。最初は可変モジュールはa.b.fooのような文字列です。残念ながら、私はまだPython 2を廃止することはできません。

+1

を、あなたは「混乱」と正確に何を意味するのですか?それはエラーを投げますか?結果は期待通りですか?多分、これはエンコーディングエラーですか? – syntonym

+0

2.xの初期のPythonバージョン – linusg

+0

にwithステートメントが含まれていない可能性があります。2.7.10を使用しています。 – tschm

答えて

2

多くの場合、* .pyファイルは__file__ではなく* .pycファイルになります。あなたの場合は本当に混乱です。ただ、ファイル名の最後の文字を切り落とし、あなたは簡単に行うことができます)

import os 
import importlib 

#new_module = __import__("module") 
new_module = importlib.import_module("module") 

new_module_filename = os.path.realpath(new_module.__file__) 
if new_module_filename.endswith(".pyc"): 
    new_module_filename = new_module_filename[:-1] 

with open(new_module_filename) as ff: 
    source = ff.read() 
print(source) 
+0

Gosh、ちょっとハックです。モジュールオブジェクトの「プライベート」メンバーにアクセスし、結果の文字列を手掛かりにします。しかし、動作します:-)ありがとう – tschm

+0

あなたは歓迎です\ _(ツ)_ /¯ – salomonderossi

0

import sys 
f= open(sys.argv[0]) 
content = f.read() 
print content 
関連する問題