Вызов 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#?,