Сценарий аргументов и встроенный IronPython
-
05-07-2019 - |
Вопрос
У меня есть встроенный механизм сценариев в моем приложении C #, который использует IronPython 2. Я создаю среду выполнения Python и добавляю несколько классов в глобальное пространство имен, чтобы скрипт мог импортировать их как модули.
Однако, одна (довольно простая) вещь, которую я не могу понять, это как отправлять аргументы скрипта. Я понимаю, что могу просто создать переменную со списком аргументов, но должен быть правильный способ сделать это. Кроме того, правильное выполнение Python позволяет мне компилировать скрипты и использовать автоматический конструктор документов под названием Sphinx. Таким образом, конечная цель состоит в том, чтобы иметь возможность использовать:
import sys
sys.argv
В одном из моих скриптов он получает аргументы, указанные пользователем (через приложение C #).
Сейчас я вызываю скрипт, используя:
// set up iron python runtime engine
_engine = Python.CreateEngine();
_runtime = _engine.Runtime;
_scope = _engine.CreateScope();
// run script
_script = _engine.CreateScriptSourceFromFile(_path);
_script.Execute(_scope);
И я попытался найти API, чтобы добавить аргументы сценария, но безуспешно. Я также попытался добавить их в путь к сценарию (например, _path), но безуспешно. Я попытался с помощью CreateScriptSourceFrom File и CreateScriptSourceFromSting (что в любом случае было слишком долго ...).
Возможно ли то, что я пытаюсь сделать?
Решение
Когда вы создаете движок, вы можете добавить " Аргументы " опция содержит ваши аргументы:
IDictionary<string, object> options = new Dictionary<string, object>();
options["Arguments"] = new [] { "foo", "bar" };
_engine = Python.CreateEngine(options);
Теперь sys.argv
будет содержать ["foo", "bar"]
.
Вы можете установить options["Arguments"]
на все, что реализует ICollection<string>
.
Другие советы
sys.argv в конечном итоге будет возвращать фактические параметры, переданные в приложение хостинга. Вот несколько способов решить эту проблему:
<Ол>