Skip to main content

Provides an easy way to run your scripts by console commands and hotkeys

Project description

Библиотека hotconsole позволяет запускать ваши скрипты на Windows в двух режимах: при помощи горячих клавиш и консольных команд. Таким образом ваши скрипты становятся удобным инструментом для повседневного использования в одиночку или в команде - без всяких усилий с вашей стороны.

Hotconsole автоматически выводит в консоль информацию о командах, обрабатывает аргументы, запрашивает необходимую информацию у пользователя, дает возможность конфигурации и обновления (для командной работы), а также предоставляет ряд полезных методов.

Горячие клавиши работают глобально, поверх всех окон, а при необходимости действий в консоли - происходит автоматическое переключение на консоль. Примеры можно посмотреть и запустить в папке examples.

Установка

Библиотека требует python 3.10 или выше (если устанавливаете в первый раз, соглайтесь на добавление переменной в path). Проверяем версию python --version, делаем python -m ensurepip и устанавливаем библиотеку командой:

python -m pip install hotconsole

При запуске любого скрипта при помощи библиотеки - в папке со скриптом появляется батник для установки hotconsole. Батник пригодится, чтобы не обновлять библиотеку вручную. А еще, чтобы ваши пользователи могли легко установить библиотеку, а также подтянуть все зависимости, которые вы добавите сами и выгрузите в файл requirements.txt.

Запуск команд

Рассмотрим простой пример пользовательского main.py - с командой для остановки службы

from hotconsole.hotconsole import Command, Runner, Hotkey
from hotconsole.helpers import OSHelper

TurnService = Command("turn", "Отключить службу", labmda_: OSHelper.try_stop_service("SERVICE"))

def main():
    Runner().run([Hotkey("alt+t", TurnService, None)])

Что происходит при запуске main.py:

  • Появится окошко со списком горячих клавиш
  • При необходимости оно перезапускается из-под админа
  • При нажатии alt+t останавливается служба SERVICE
  • Также можно нажать alt+q, перейти в консольный режим, написать turn - и получить тот же результат
  • У пользователя появится конфиг data.json в папке с main.py

Опции

Когда у нас парочка скриптов - можно создавать команды и без опций. Тогда по нажатию горячей клавиши сразу будет выполняться нужное действие.

С этим подходом возникают проблемы, когда скриптов становится много - и при этом они тематически тесно связаны. В результате приходится создавать однотипные команды и запоминать / просматривать в списке десятки горячих клавиш.

Решение - создавать определенные команды с опциями. У пользователя будет автоматически уточняться номер опции и передаваться в вашу функцию в качестве аргумента.

Например, при создании команды передаем опции ["Включить", "Выключить", "Перезапустить"]
Тогда функция будет выглядеть так:

def turn_service(option_number):
    match option_number:
            case 1:
                OSHelper.try_stop_service("SERVICE")
            case 2:
                OSHelper.try_start_service("SERVICE")
            case 3:
                OSHelper.try_rerun_service("SERVICE")

А команда так:

TurnService = Command("turn", "Изменить состояние службы", turn_service, ["Включить", "Выключить", "Перезапустить"])

В результате:

  • При нажатии alt+t в любом окне - происсходит переключение на окно консоли
  • В консоли появляется список вариантов: 1. Выключить, 2. Включить, 3. Перезапустить
  • При выборе варианта выполняется соответствующее действие
  • Если в горячей клавише указать вместо None, например, 1 - служба сразу остановится без вопросов в консоли
  • Если перейти в консольный режим по alt+q и написать, например, turn 3 - служба сразу перезапустится

Также можно передать в команду option_message - вопрос, который будет уточнять у пользователя номер опции. По умолчанию это фраза "Введите номер варианта"

Возможности конфигурации

При первом запуске main.py - создается конфиг data.json с версией = 1.

Конфиг полезен:

  1. Для кэширования. Если в процессе выполнения команды нужно сохранить значение переменной, то можно в этот файл
  2. Для кастомизации. Например, по умолчанию в конфиге есть поле console_mode. Пользователь может выставить его в True и перейти в консольный режим без горячих клавиш.
  3. Для обновления. Если версия конфига пользователя неактуальна (расходится с версией в файле main.py), в конфиг автоматически добавляются новые поля. Также можно вставить в процесс инициализации миграцию.

Создаем конфиг для передачи в Runner:

config = Config (version=22, consoleMode=False, refuseStartup=False, isAnything = False)

Допустим, в 22 версии изменилось поле "isSomething" на "isAnything". Чтобы не потерять данные наших пользователей, можем сделать миграцию:

def migration_to_22():
    config = OSHelper.extract_whole_json(CONFIG_PATH)
    if "consoleModeIsDefault" in config.keys():
        config["isAnything"] = config["isSomething"]
        OSHelper.write_file(CONFIG_PATH, json.dumps(config, indent=4))

Также может возникнуть потребность перед запуском каждой команды выполнять определенные действия и актуализировать данные пользователя. Для этого при создании Runner в него можно передать метод для актуализации.

Hotstrings

Hotstring - это как горячая клавиша, но только для строк. Например, мы можем создать Hotstring("githot", "Гитхаб hotconsole", "https://github.com/Vecheren/hotconsole") И передать массив таких объектов в метод run.

Работает это так: пишем githot, нажимаем пробел - вместо githot в нашем случае подставляется ссылка.

Хелперы

В hotconsole.helpers также есть хелперы, которые могут пригодиться при написании команд. Например:

  • DBHelper - для взаимодействия с БД SQLite.
  • OSHelper - для взаимодействия с виндой.
  • RequestsHelper - для создания запросов к внешнему API.
  • InnGenerator - генератор ИНН

Известные ограничения

Hotconsole работает только на Windows, на линуксе и маке не запустится.

Библиотека проверялась на python 3.10, 3.11 и 3.12. Версия ниже не подойдет из-за использования pattern-matching, который наконец-то завезли в питон.

Запуск нескольких приложений с hotconsole одновременно - работает успешно. Но если у вас возникнет такая потребность, надо будет следить, чтобы не пересекались горячие клавиши в разных приложениях (иначе будут срабатывать сразу обе).

Приложение требует админские права и автоматически перезапускается из-под админа. Но если у вас включен UAC, он будет доставать вас вопросами, запустить ли приложение. Для удобства можно выключить его в разделе "Изменение параметров контроля учетных записей".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hotconsole-0.2.7.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

hotconsole-0.2.7-py3-none-any.whl (22.9 kB view details)

Uploaded Python 3

File details

Details for the file hotconsole-0.2.7.tar.gz.

File metadata

  • Download URL: hotconsole-0.2.7.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for hotconsole-0.2.7.tar.gz
Algorithm Hash digest
SHA256 303095c4fcd66f1f7840b89ca1406e8be1cd1eac0141d2f27bed6366f6ad1b76
MD5 e6945e7d4d8c18968d9cef4fed1e5cd3
BLAKE2b-256 d1e532f689b2df7d9c55dbd2c5d65acba0b36e93d0a702c5435959d3ea9a02d0

See more details on using hashes here.

File details

Details for the file hotconsole-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: hotconsole-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 22.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for hotconsole-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 77c7d6c0313b6f7207d2d0f1103013d391f9db964764c6692be7c92b39114df4
MD5 4a90ff4e4128623aefbd73d8dd66f9dd
BLAKE2b-256 9cf95c17a0441a5045f4d092dd848e3e716499f058df682f016ece150559ddd3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page