2012-03-27 4 views
1

のid 'execfile' Pythonコマンド の機能を実行する方法を知りたいと思っていますが、C#からです。この例では、IronPython 'execfile' C#

var runtime = Python.CreateRuntime(); 
dynamic scope = Python.UseFile("body.py"); 

を指定します。 body.pyのヘッダで

、私はヘッダーを指定:

execfile('header.py') 

私はそれを行うことができますどのように、C#からそのexecfileをを作りたいですか?

注:私は header.pyスコープ内で変数を動的に宣言しているため、インポートは機能しません。インポートはまだ が存在しないため、その変数をインポートしません。

ありがとうございました!

答えて

1

execファイルと異なる動作が必要な場合は、.NETで関数を作成してこれをスコープに設定することで、独自のものを簡単に作成してこのようなことを実行できます(共有スコープ)。これにより、必要に応じて追加の機能を追加することもできます。

これは動作するようです:エンジンの設定

var py = Python.CreateEngine(); 
var source = py.CreateScriptSourceFromFile(@"..\..\IronPython\body.py"); 
var scope = py.CreateScope(); 

その後、私はスクリプトで使用可能な関数を作成し、今すぐスコープに

Action<string> execFileCallback = fileName => 
{ 
    var s2 = py.CreateScriptSourceFromFile(fileName); 
    s2.Execute(scope); 
}; 
((dynamic)scope).myexecfile = execFileCallback; 
source.Execute(scope); 

それを設定します私のBody.pyは次のようになります:

someVarSetByBody = "This was set by the body" 
Console.WriteLine("Body is loading") 
myexecfile(r"..\..\IronPython\Header.py") 
Console.WriteLine("Body has loaded") 

そして、私のHeader.pyは、次のようになります

Console.WriteLine("Header is loading") 
Console.WriteLine("Variable set by body: %s" % someVarSetByBody) 
Console.WriteLine("Header has loaded") 

今あなたが変数を共有することができますので、別のスクリプトで同じスコープを使用することができます。