Вызов tap_example.py из C # для получения TAP-потока Membase

Я пытаюсь использовать среду выполнения динамического языка / IronPython, чтобы просто запустить сценарий .py с аргументами команды, а затем получить вывод std. Это для выполнения протокола TAP мембраны, который еще не реализован в C #:

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.

Какие-либо предложения?


person Sean Thoman    schedule 15.11.2011    source источник


Ответы (1)


Вы можете передать аргументы при создании движка, как показано в ответе Джеффа Харди в аргументах сценария и Сообщение о встроенном IronPython на 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, как показано в Как перенаправить стандартный вывод ironpython на C #?.

person Matt Ward    schedule 15.11.2011