【问题标题】:Calling tap_example.py from C# to get Membase TAP Stream从 C# 调用 tap_example.py 以获取 Membase TAP Stream
【发布时间】:2011-12-29 04:09:08
【问题描述】:

我正在尝试使用动态语言运行时/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# python dynamic ironpython membase


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 2016-07-07
      • 2014-03-29
      • 2019-09-08
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多