Вызов tap_example.py из C # для получения Membase TAP Stream - PullRequest
1 голос
/ 15 ноября 2011

Я пытаюсь использовать динамический язык выполнения / 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.

Есть предложения?

1 Ответ

2 голосов
/ 15 ноября 2011

Вы можете передать аргументы при создании движка, как показано ответом Джеффа Харди в аргументах Script и сообщении Embedded 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 # .

...