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