2017-01-19 11 views
1

私は別のpythonスクリプトを含む文字列を取り込むメソッドを持つpythonスクリプトを持っています。私はそのスクリプトを実行し、そこで関数を呼び出し、その関数の結果をメインスクリプトで使用したいと思います。現在、次のようになっています。Python内から複雑なpythonスクリプトを実行する

"process"関数は、コンパイルされた実行時に実行されるスクリプトに存在するとみなされます。

このソリューションは、次のように、非常に簡単なスクリプトに適しています:

def process(): 
    return "Hello" 

...しかし、私は実行するために、より複雑なスクリプトを得る運を持っていませんよ。たとえば、私のスクリプトは、JSON形式のパッケージを使用している場合は、私が手:私の処理機能は、その同じスクリプト内の別の関数を参照する場合

global name 'json' is not defined

また、私もそこにエラーが発生します:

def process(): 
    return generateResponse() 

def generateResponse(): 
    return "Hello" 

は...私にエラーを与える:

global name 'generateResponse' is not defined

が、これは名前空間の問題ですか?どのようにjson(標準的なpythonパッケージ)が認識されないのでしょうか?何かアドバイスをいただければ幸いです!

+3

これは非常に非常に悪い考えのように聞こえます...あなたがやろうとしていることを処理するためのより良い方法があるのは確かに100%です。 –

+0

実行しようとしているスクリプトの完全な例を教えてください。これはちょうど行方不明のimportステートメントかもしれません。 – pelya

+0

提案していただきありがとうございます。私は、一時的なファイルにコード文字列をダンプすることに終わった - 理想的ではないが、それはかなりうまくいくようだ。私は実行時にファイル名のみを知っているので "myscriptインポートプロセスから"使うことはできませんが、ファイルランタイムをインポートするソリューションにコメントを追加しました。 –

答えて

1
import subprocess 

subprocess.call(["python","C:/path/to/my/script.py"]) 

私はこれに反対し、importを使用してください。

これは、PYTHONPATHが環境変数に設定されていることを前提としています。

+0

ありがとう!文字列からコード全体を実行することは理想的ですが、一時ファイルにダンプすることも同様です。私はここで概説された解決策に行きました:http://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path 特に、この1つ: 'spec = importlib .util.spec_from_file_location( "myScript"、fullPath) myModule = importlib.util.module_from_spec(spec) spec.loader.exec_module(myModule) ' –

関連する問題