1

我正在尝试使用动态语言运行时/IronPython 来简单地运行带有命令参数的 .py 脚本,然后获取 std 输出。这是用于执行尚未在 C# 中实现的 membase TAP 协议:

public class MembaseTap
{
    public void Tap()
    {
        var pyEngine = Python.CreateEngine(); 

        pyEngine.ExecuteFile(@"E:\Program Files\Membase\Server\bin\tap_example.py"); 


    }
}

我相信我可以使用 ExecuteFile 来运行脚本,但我不知道如果可能的话,在这种情况下如何传递参数。

本质上,如果我从命令行运行命令,它将是:

python tap_example.py localhost:11210

我可以简单地从 C# 运行它,但这需要安装 Python。这是一个后备选项,但我更喜欢使用 DLR。

有什么建议么?

4

1 回答 1

2

您可以在创建引擎时传入参数,如 Jeff Hardy 在Script arguments 和 Embedded IronPython post on StackOverflow 中的回答所示。您的 C# 代码如下所示:

public class MembaseTap
{
    public void Tap()
    {
        var options = new Dictionary<string, object>();
        options["Arguments"] = new [] { "foo", "bar" };
        var pyEngine = Python.CreateEngine(options); 

        pyEngine.ExecuteFile(@"E:\Program Files\Membase\Server\bin\tap_example.py"); 
    }
}

要重定向标准输出,您可以使用 pyEngine.Runtime.IO 对象上的方法,如 如何在 C# 中重定向 ironpython 的标准输出?.

于 2011-11-15T19:14:27.757 回答