1

ですから、私はPythonを初めて使用し、VisualStudioでIronPythonを使用しています。

そのため、C#プロジェクトでは、いくつかのタスクを実行するためにPythonスクリプトを呼び出します。現在、私はより大きな会社で働いているので、多くのファイルパスなどが異なります。そして、Pythonファイルにパスを渡してから、このパスからモジュール(たとえば、urlib)をインポートすることが可能かどうか疑問に思っています。

したがって、IronPythonを使用したC#では、次のコマンドを使用してPythonスクリプトを実行できます。

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

そして、Pythonスクリプトで次のコードを取得しました。

import sys
path = "C:\Program Files (x86)\IronPython 2.7\Lib"
sys.path.append(path)
import urllib
import httplib
...

そのため、変数パスのパラメーターを渡すことができるかどうか疑問に思っていたので、sys.path.append(path)は指定されたパラメーターで変更され、ライブラリは正しくインポートされます。

4

2 に答える 2

1

スクリプトにパラメータを渡したいだけですか?確かに、それは簡単です。

これを行う主な方法は、次を使用することですsys.argv

import sys
path = sys.argv[1]
sys.path.append(path)
import urllib
import httplib

次に、これを行う代わりに:

py.exe myscript.py

これをして:

py.exe myscript.py "C:\Program Files (x86)\IronPython 2.7\Lib"

これを.NETランチャープログラム内から直接実行している場合は、変数を動的に挿入することもできます。

PYthon_Script.SetVariable("path", "C:\Program Files (x86)\IronPython 2.7\Lib")

次に、スクリプト内から、その変数を使用できます。

またはsys.path、ランチャーから自分自身を変更することもできます。詳細については、Runtimeドキュメントを参照してください。

複数のパスを追加する場合は、次の2行を変更するだけです。

paths = sys.argv[1:]
sys.path.extend(paths)

環境内にとどまるものが必要な場合は、毎回それを渡す必要はありません。それが環境変数の目的です。

実際には、IRONPYTHONPATH何もしなくても機能するという名前の標準環境変数があります。私自身はこれを使用したことがありませんが、機能する場合は、コードで明示的に何もする必要はありません。cmd.exeシェル、コントロールパネル、起動元のC#プログラムで、myscript.py適切なものを設定するだけです。この回答には、最初の2つの例があります。PYTHONPATH(IronPythonに影響を与えるのではなく、CPythonに影響を与える設定を行っていますIRONPYTHONPATHが、何を変更するかは明らかです。)

それが機能しない場合は、同じことを手動で行うことができます。

import os
import sys
path = os.environ['MY_IRONPYTHON_EXTRA_PATH']
sys.path.append(path)
import urllib
import httplib

MY_IRONPYTHON_EXTRA_PATHこれで、の代わりにその環境変数を設定できますIRONPYTHON_PATH

ここでは、リストではなく文字列があるため、複数のパスを指定する場合は、区切り文字を追加する必要があります。Windowsの標準のパス区切り文字はセミコロンです。それで:

paths = os.environ['MY_IRONPYTHON_EXTRA_PATH'].split(';')
sys.path.extend(paths)
于 2013-01-04T09:00:52.297 に答える
0

[TestMethod]プロジェクトで、C#コマンドのみを使用したコンソールI/Oなしでそれを行う方法を見つけました。

C#コードは次のようになります。

IDictionary<string, object> options = new Dictionary<string, object>();
options["Arguments"] = new [] {"C:\Program Files (x86)\IronPython 2.7\Lib", "bar"};

var ipy = Python.CreateRuntime(options);
dynamic Python_File = ipy.UseFile("test.py");

Python_File.MethodCall("test");

したがって、基本的には、Pythonファイルで定義したいライブラリパスを使用して辞書を送信します。

したがって、PYthonスクリプトは次のようになります。

#!/usr/bin/python

import sys
path = sys.argv[0]  #1 argument given is a string for the path
sys.path.append(path)
import httplib
import urllib
import string

def MethodCall(OutputString):
    print Outputstring

そのため、メソッド呼び出しはC#からはるかに簡単になり、引数の受け渡しは同じままです。また、このコードを使用すると、Pythonファイル用のカスタムライブラリフォルダーを取得できます。これは、さまざまなPCが多数あるネットワークで作業する場合に非常に便利です。

于 2013-01-04T13:38:44.560 に答える