web-dev-qa-db-ja.com

python in C#Applicationの統合

次の問題があります。Pythonで記述された古いアプリケーションを取得しました。このアプリケーションでは、ユーザーは小さなpython実行されるステップを指定できます。pythonステップは基本的に小さいですpythonスクリプト、このアプリケーションの実行には、コマンドラインから何かを実行するような他のステップが含まれるため、これらをステップと呼びます。これらのpythonステップは、pythonコードとしてxmlファイルに保存されます。

ここで、C#.NETを使用してアプリケーションを書き直したいと思います。このようなことをするためのベストプラクティスの解決策はありますか?

pythonを外部プログラムとして呼び出し、実際のpython step(script)をpythonインタープリター-何か組み込みたいのですが、IronPythonと.NETに出会ったばかりですpythonどちらを使用するかよくわかりません。小さなスクリプトで何らかのデバッグを行いたいのですが、これが、通訳ソリューションの呼び出しが受け入れられない理由です。

さらに重要なことは、これらのスクリプトの多くは既に存在しているということです。したがって、私はpythonと同じ構文を持つpythonおよびpythonの同じ組み込みライブラリと同様にC#実装を使用する必要があります。これは可能ですか? ?

感謝と挨拶Xeun

14
Xeun

IronPython は必要なものです。 .NETバイトコードにコンパイルされます。 pythonコードを別の.NET言語から(およびその逆)に合理的に簡単に呼び出すことができます)IronPythonはVisual Studioでもサポートされていると思います。

12
cdjc

Pythonスクリプトは、IronPythonを使用してC#から実行できます。

    var ipy = Python.CreateRuntime();
    dynamic test = ipy.UseFile("Test.py");
    test.Simple();

以下も参照してください。

http://putridparrot.com/blog/hosting-ironpython-in-a-c-application/

そして

https://blogs.msdn.Microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-a-c-4-0-program/

3
FrankyHollywood

IronPythonのScriptScope.GetVariableを使用して実際の関数を取得し、C#関数のように呼び出すことができます。次のように使用します。

C#コード:

var var1, var2 = ...
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"C:\test.py", scope);
dynamic testFunction = scope.GetVariable("test_func");
var result = testFunction(var1,var2);

Pythonコード:

def test_func(var1,var2):
    ...do something...

最終的にそれを理解するのにしばらく時間がかかりましたが、それは非常に簡単です。そして、IronPythonは無料で、非常に使いやすいです。お役に立てれば :)

1
LiRoN