Вопрос или проблема
Я ищу класс-обертку для библиотеки, чтобы обернуть Unix-команду в класс Python (возможно, для дальнейшего представления команды на веб-сайте). Идеально, чтобы параметры команды были представлены в строке документации моего обернутого класса, а библиотека автоматически (или с помощью вызовов методов) извлекала обязательные и необязательные аргументы. Вы видели или слышали о такой библиотеке?
Подробности, касающиеся функции класса-обертки библиотеки
Предположим, я хочу обернуть набор команд в специальный класс Python, возможно, для дальнейшего представления на веб-странице, которая снова могла бы представить различные параметры, доступные для команды. Существует ли уже такая библиотека?
Вот некоторые дальнейшие объяснения того, что я хотел бы получить от библиотеки, если она существует, исходя из несколько упрощенной команды helloworld
с использованием:
helloworld [-t <text>] [-n <num>] -U -U переводит текст в верхний регистр -t <text> текст для отображения, по умолчанию [Hello world] -n <num> Количество повторений
Чтобы обернуть эту команду, я хотел бы написать класс Python, несколько похожий на следующий:
class HelloWorld(CommandWrapper):
"""Обертка вокруг команды helloworld.
Параметры:
use_uppercase -U Перевести текст в верхний регистр [ложь]
text -t <text> Текст для отображения [Hello World]
repeats -n <num> Количество повторений [1]
"""
def __init__(self, *args):
self.build_options(__doc__, 'helloworld', args)
Теперь это можно использовать следующим образом:
all_defaults = HelloWorld()
with_args = HelloWorld(number=4, "Классно")
print("Команда со всеми параметрами по умолчанию: {}".format(all_defaults))
print("Команда с аргументами: {}".format(with_args))
что выведет следующее
Команда со всеми параметрами по умолчанию: helloworld
Команда с аргументами: helloworld -n 4 -t Классно
По желанию, этот класс-обертка библиотеки также предоставит некоторые элементы/списки/словари, которые будут использованы на веб-странице, где было бы возможно получить имя команды и какие различные параметры доступны (возможно с параметрами по умолчанию). Исходя из этой информации, можно было бы создать форму, в которой было бы возможно добавлять параметры и выбирать подходящие значения для добавленных параметров.
Возможно, попробуйте модуль ‘sh’
pip install sh
Он позволяет вызывать команды так, как если бы они были функциями Python
from sh import ifconfig print ifconfig("eth0")
При внимательном чтении вопроса я понимаю, что вы хотите представить пользователю параметры, которые действительны или могут быть добавлены к конкретной команде больше всего, поэтому я бы предложил в качестве отправной точки explainshell.
Цель explain shell заключается в том, чтобы анализировать страницы man, чтобы определить, какие возможные аргументы существуют, и объяснить данную командную строку, сопоставляя каждый аргумент с соответствующим текстом помощи в странице man.
Текущая версия explainshell включает сопоставитель для анализа заданной командной строки и представления пользователю соответствующего текста помощи, в то время как вам понадобится конструктор для добавления параметров с действительными аргументами из пользовательского интерфейса.
Ответ или решение
Python Wrapper Class Library для UNIX-команд с Аргументами
В последние годы разработка на Python стала особенно популярной среди тех, кто работает с командной строкой UNIX. Программные интерфейсы могут сильно упростить эту работу, делая ее более удобной и интуитивно понятной. Ваша задача — создать обертку для UNIX-команды, которая будет представлять возможности команды и её аргументы в Python-коде, а также создавать возможность для веб-презентации этих данных. Рассмотрим, какие шаги можно предпринять и какие библиотеки могут помочь в этом процессе.
Базовое Описание Проблемы
Вы хотите создать класс Python, который будет инкапсулировать конкретную команду UNIX и драйвить опции, доступные для этой команды. Таким образом, класс будет не только выполнять команду, но и предоставлять информацию об ее параметрах в виде документации.
Пример Команды
Рассмотрим команду helloworld
с использованием следующих опций:
helloworld [-t <text>] [-n <num>] -U
-U uppercase the output text
-t <text> text to display, defaults to [Hello world]
-n <num> Number of repeats
Предложенная Структура Класса
class HelloWorld(CommandWrapper):
"""Обертка для команды helloworld.
Опции:
use_uppercase -U Преобразовать текст в верхний регистр [false]
text -t <text> Текст для отображения [Hello World]
repeats -n <num> Количество повторений [1]
"""
def __init__(self, text="Hello World", repeats=1, use_uppercase=False):
self.text = text
self.repeats = repeats
self.use_uppercase = use_uppercase
self.command = self.build_command()
def build_command(self):
cmd = "helloworld"
if self.use_uppercase:
cmd += " -U"
cmd += f" -t '{self.text}'"
cmd += f" -n {self.repeats}"
return cmd
def __str__(self):
return self.command
Использование Класса
Теперь вы можете создать экземпляры класса так:
all_defaults = HelloWorld()
with_args = HelloWorld(text="Cool", repeats=4)
print("Команда с настройками по умолчанию:", all_defaults)
print("Команда с аргументами:", with_args)
Существующие Библиотеки
Название вашей библиотеки немаловажно. Хотя персонализированные решения, такие как CommandWrapper, могут быть полезны, несколько существующих библиотек уже могут помочь вам с этой задачей.
-
sh: Эта библиотека позволяет вызывать команды UNIX как функции Python. Установка:
pip install sh
Пример использования:
from sh import helloworld print(helloworld("-U", "-t", "Sample Text"))
-
explainshell: Может помочь в парсинге командных строк и выводе описания доступных опций. Этот инструмент, предназначенный для объяснения командных строк, может оказаться полезным при работе с документацией и объяснением параметров.
-
argparse: Хотя это не специализированная библиотека для UNIX-команд, вы можете использовать
argparse
для создания интерфейсов командной строки, которые позволят организовать варианты командных строк и предоставлять пользователю гибкие опции.
Возможности для Веб-презентации
Для представления данных на веб-странице вы можете использовать Flask или Django, чтобы создать серверную часть, которая будет отображать доступные опции и значения команды. Информация о командах и их параметрах может быть извлечена из классовых докстрингов, что позволит вам динамически формировать формы на основе доступных параметров.
Заключение
Создание библиотеки-обертки для UNIX-команд на Python — это мощный подход для повышения продуктивности и удобства работы с командной строкой. С помощью описанных выше подходов, вы сможете разработать современное решение, которое будет легко расширять и настраивать под конкретные нужды пользователей. Рекомендуется использовать существующие библиотеки, такие как sh
, для выполнения команд и explainshell
для анализа параметров, чтобы минимизировать количество повторной работы и улучшить пользовательский опыт.