我正在尝试使用动态语言运行时/ IronPython来简单地使用命令参数运行.py脚本,然后获取标准输出。这是用于执行尚未在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。

有什么建议么?

最佳答案

您可以在创建引擎时传递参数,如StackOverflow上Script arguments and Embedded IronPython帖子中Jeff Hardy的回答所示。您的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对象上的方法,如How can I redirect the stdout of ironpython in C#?所示。

关于c# - 从C#调用tap_example.py以获取Membase TAP流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8130851/

10-12 12:41