Гостевая статья Python-Nubia - Система командной строки и интерактивной оболочки

Nubia - это для построения приложений командной строки с помощью Python. Изначально он был разработан для "интерактивной оболочки logdevice (он же ldshell)" на Facebook. С тех пор он стал многоразовым компонентом, и несколько внутренних проектов теперь полагаются на него как на быстрый и простой способ получить интуитивно понятное приложение shell/cli без лишних шаблонов.

Nubia построен на основе python-prompt-toolkit, который является фантастическим для построения интерактивных приложений командной строки.
Отказ от ответственности: Nubia - это бета-версия для не-ldshell вариантов использования в приложениях. Некоторые дизайнерские решения могут показаться странными, но они идеально подходят для использования в ldshell. Мы постоянно вносим изменения, чтобы сделать его более последовательным и универсальным вне рамок ldshell use-case. Пока не будет опубликован полностью стабильный релиз, используйте его на свой страх и риск.
Обратитесь к файлу CONTRIBUTING, чтобы узнать, как нам помочь.
Если вас интересует происхождение названия, ознакомьтесь с с ее уникальной и красочной архитектурой.

Основные характеристики
  • Интерактивный режим, который предлагает автоматическое завершение
  • Режим CLI, который генерируется из ваших функций и классов.
  • Необязательные дополнения bash / zsh с помощью внешней утилиты 'nubia-complete' (экспериментальная)
  • Настраиваемая строка состояния в интерактивном режиме.
  • Дополнительная интерактивная оболочка на основе IPython
  • Аргументы с подчеркиванием переносятся автоматически
  • Аннотации типа Python 3 используются для проверки типа ввода
Интерактивный режим
Интерактивный режим в Nubia - это то, что делает его уникальным. Очень легко создать уникальную оболочку для вашей программы без лишних затрат. Интерактивная оболочка в упрощенном виде предлагает автоматические дополнения для команд, подкоманд, аргументов и значений. Она также предлагает разработчикам большой контроль над авто-завершениями, даже для команд, которые не подпадают под типичный формат. Примером может служить команда "select" в ldshell, которая выражается в виде SQL-запроса. Мы ожидаем, что в большинстве случаев использования Nubia такой контроль не понадобится, и команды AutoCommand будет достаточно без дополнительной настройки.
Если вы запускаете программу на Nubia без команды, она автоматически запускает интерактивную оболочку. Интерактивный режим выглядит следующим образом:
- через VPN

Не интерактивный режим
Режим CLI работает точно так же, как любая традиционная утилита основе Unix .
python-nubia_3_non_interactive.png


Пример
Это начинается с такой функции:
Код:
import socket
import typing

from termcolor import cprint
from nubia import argument, command, context

@command
@argument("hosts", description="Hostnames to resolve", aliases=["i"])
@argument("bad_name", name="nice", description="testing")
def lookup(hosts: typing.List[str], bad_name: int):
    """
    This will lookup the hostnames and print the corresponding IP addresses
    """
    ctx = context.get_context()
    print(f"hosts: {hosts}")
    cprint(f"Verbose? {ctx.verbose}")

    for host in hosts:
        cprint(f"{host} is {socket.gethostbyname(host)}")

    # optional, by default it's 0
    return 0

Требования
Приложения на основе Nubia требуют Python 3.6+ и работают как с и с Linux. Хотя теоретически он должен работать на Windows, он никогда не пробовал.

Установка Nubia
Если вы устанавливаете Nubia для вашего следующего проекта, вы можете легко использовать pip для этого:
Код:
pip3 install python-nubia

Сборка Nubia из источника
Убедитесь, что pipenv установлен:
Код:
pip3 install pipenv

Вы можете использовать либо setup.py для создания tarball, либо использовать pipenv для установки virtualenv со всеми установленными зависимостями.

Пример запуска в virtualenv:
Если вы хотите запустить пример, то вам нужно добавить корень дерева исходных текстов в ваш PYTHONPATH.
Код:
pipenv update --dev
pipenv shell
Код:
export PYTHONPATH=”$(pwd)”
cd example/
python nubia_example.py

Для проведения тестов:
Код:
pipenv run nosetests

Начало работы
См. руководство по началу работы, чтобы узнать, как построить простое приложение с Nubia.

Скачать Python-Nubia
***************************
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!