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

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

Решение

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

Другие вопросы по тегам