从c#调用tap_example.py来获取Membase TAP流

本文关键字:获取 Membase TAP py example 调用 tap | 更新日期: 2023-09-27 18:14:53

我试图使用动态语言run time/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。

有什么建议吗?

从c#调用tap_example.py来获取Membase TAP流

你可以在创建引擎时传递参数,如Jeff Hardy在StackOverflow上的脚本参数和嵌入式IronPython帖子中的回答所示。你的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的标准输出?