我有一个嵌入式scripting engine在我的C#应用程序使用的IronPython2.我创造的蟒蛇的运行,并添加一些课程对全球的名字空间,以便脚本可以进他们作为模块。

然而,一(基本)的事情,我可找不出是如何发送剧本参数。我意识到我可以创建一个变量清单的参数,但必须有一个适当的方式做到这一点。此外,这样做的适当'Python'的方式让我可以编写脚本,并使用一个自动化的文件生成器所谓的狮身人面像。所以最终目标是要能够使用:

import sys
sys.argv

在我的一个脚本,并已获得的参数的用户指定(通过的C#应用程序).

现在,我呼脚本通过使用:

// set up iron python runtime engine
_engine = Python.CreateEngine();
_runtime = _engine.Runtime;
_scope = _engine.CreateScope();

// run script
_script = _engine.CreateScriptSourceFromFile(_path);
_script.Execute(_scope);

我已经尝试过寻找一个API添加脚的论点没有运气。我还试图追加他们的脚本路径(_path例)没有运气。我试着用CreateScriptSourceFrom文件和CreateScriptSourceFromSting(这是一个长枪杀无论如何...).

为什么我想要做甚至可能吗?

有帮助吗?

解决方案

当你创造的发动机,可以添加一个"参数"项包含你的参数:

IDictionary<string, object> options = new Dictionary<string, object>();
options["Arguments"] = new [] { "foo", "bar" };
_engine = Python.CreateEngine(options);

现在 sys.argv 将包含 ["foo", "bar"].

你可以设定 options["Arguments"] 为什么实现 ICollection<string>.

其他提示

sys.argv是要最终将返回的实际参数通过进入主机应用程序。这里有几种方法来解决这个:

  1. 重写你的脚本中接受全球变量,然后用ScriptScope.SetVariable
  2. 运行的脚本,而是依赖它实际上回到你的一类,它可以调用的方法上(很容易在4.0动态的关键词)
  3. 复盖sys.argv用自己的执行(这是一个动态的语言毕竟!)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top