портативное дополнение оболочки в python для функций / команд mixin, перенаправления ввода / вывода, конвейера, подстановки переменных и т. д. - PullRequest
0 голосов
/ 07 июля 2019

Я хочу использовать язык сценариев оболочки вместе с языком Python как наиболее переносимым и надежным для меня языком, чтобы связать настоящий язык программы с кодированием стиля оболочки (перенаправление команд ввода / вывода, конвейерная передача, замена переменных и т. Д.).).

Недавно я провел некоторые исследования в этой области и сделал некоторые выводы.Поскольку для меня важно перенести уже существующий код из поля bash и других оболочек, я хочу использовать функции оболочки, интегрированные в язык Python, и наоборот.Поэтому мне абсолютно необходимы следующие:

  • Использование кода Python бок о бок с кодом "shell Featured", например, перенаправление или выходной трубопровод из любого произвольного кода Python в другой код Python или внешнюю команду:
def foo(...):
  ...
  # any arbitrary python code or shell featured code, which writes to the output
  ...

def boo(...):
  ...
  # any arbitrary python code or shell featured code, which reads from the input

foo(...) | boo(...) | ...some external commands... | ...some python functions... | ...and so on...
  • вызов реализации Python из других оболочек, например:
python -m anymodule myscript.myext | ...any 3dparty utilities... | ...and so on...
  • использование большинства команд в качестве внутренней функциональности Python без необходимостивызывать внешний процесс как можно дольше, чтобы ускорить весь процесс (например, в Windows внешний вызов процесса довольно дорогой, поэтому мне пришлось выбрать Python, чтобы обойти это как можно проще).

Я нашел эти реализации как наиболее близкие к тому, что я хочу видеть:

Но выясняется, что xonsh более уместен в качестве замены терминала, а не в качестве реальной замены сценариев оболочки, когда это происходит вместе с интеграцией с Python. Вот список проблемs, которые просто блокируют вещь:

Все эти проблемы превращают xonsh в очень сырую реализацию для настоящих сценариев оболочки в сочетании с кодом python илидругие модули Python.

С другой стороны, Plumbum предлагает почти те же функции, но я все еще не мог найти ближайшую интеграцию с кодом Python.Примеров просто нет, где я мог бы просто перенаправить вывод из произвольного кода Python во внешнюю команду или что-то в этом роде.

Есть ли какой-то прогресс в этой области, может быть из-за другой реализации?Или, может быть, я хочу слишком многого?

Или, может быть, вы можете привести некоторые примеры в ксон или свинце, которые возможны и не вылетают слишком часто?

PS: я не знаю, гдеспросить это, когда Stackoverflow ориентирован на конкретные вопросы в конкретной области, но мой вопрос слишком расплывчат в общем.

...