Python имеет возможность работы в режиме интерпретатора, в котором команды и операции выполнятся сразу после их ввода. Вызов интерпретатора Python осуществляется набором команды python в командной строке. Пример работы в сеансе интерпретатора (интерактивной оболочки) показан на рис. 1.1. Для выхода из этого режима используется комбинация клавиш < CTRL >+< D >.
В интерактивной оболочке команды и операции вводятся с клавиатуры после знака приглашения интерпретатора >>> . Ввод каждой операции завершается нажатием на клавишу < ENTER >, после чего Python выполняет эту операцию и выдаёт результат или сообщение об ошибке. После присваивания результата операции какой-нибудь переменной никакой результат не выдаётся, а чтобы его увидеть, нужно набрать имя переменной и нажать < ENTER >.
Однако в интерактивной оболочке неудобно работать с файлами программ. Кроме того, полезно видеть текст программы одновременно с результатами её выполнения. Такие функции (и часто многие другие) обеспечивают интегрированные среды разработки (IDE — Integrated Development Environment). Одним из достоинств IDE является подсветка синтаксиса — команды, строки, числа и другие элементы программ и данных выделяются цветом или начертанием шрифта.
KeyBind Python — Вызываем функции через ГОРЯЧИЕ КЛАВИШИ
Самая простая IDE для Python называется IDLE (рис. 1.2). В этой среде можно редактировать тексты программ в окне редактора и запускать их на выполнение. Результаты выполнения отображаются в окне выполнения, которое одновременно является окном интерактивной оболочки Python (т.е. в этом окне также можно выполнять команды).
Источник: intuit.ru
Русские Блоги
Операция первого шага нового проекта
- Настройка модуля удаляет пустые пакеты слоями, компактная пустая средняя упаковка
- Установите текущий проект как utf-8, установите Editor-> File Encodings-> all, изменив его на utf-8,
банкнота
- Ctrl + /: однострочный комментарий
- Три одинарные кавычки (двойные кавычки): многострочные комментарии
Курсорная операция
- Ctrl + Alt + Enter: вставить вверх
- Shift + Enter: вставить вниз
- end: курсор перемещается в конец строки
Код операции
- Ctrl + D: скопировать и вставить строку
- Ctrl + Y: удалить строку
- Shift + F6: команда повтора
- Ctrl + O: Скопировать код
Формат кодов и другие функции
- Ctrl + Alt + L: код формата
- Используйте alt + insert: генерируйте в коде, вы можете получить / установить и другие операции
- Ctrl + Alt + T: добавить попробовать / поймать
- Ctrl + Alt + M: извлечь код
- ctrl + alt + F: глобальная переменная извлечения переменной
Вам также необходимо установить префикс: Editor–> code style–> java–> code Genertion–> Установить передний край поля равным m - Ctrl + Alt + V: значение тела метода извлекается в переменную
- Сохранить как шаблон: Ctrl + Shift + L, это настраивается (сохранить как живой шаблон)
- вкладка: сделать отступ для выбранного контента
- shift + tab: отменить отступ для выбранного контента
- Alt + Shift + клавиши вверх и вниз: переместить выбранный код
- Ctrl + Shift + клавиши вверх и вниз: вы можете перемещать тело текущего метода, если вы перемещаете строку кода, вы можете перемещаться только внутри тела кода
- Ctrl + Shift + U: регистр кода
- ctrl + shift + enter: завершить код (добавить точку с запятой в конце строки, добавить скобки, если она есть, если)
Программа на Python для управления компьютером / Python + PyAutoGUI
Введите код
- Ctrl + мышь: введите код
- Ctrl + B: введите код
- Ctrl + Shift + 12: развернуть окно
Заменить Найти
- Ctrl + R: заменить
- Ctrl + F: Найти
- Ctrl + Shift + F: глобальный поиск
- Ctrl + Shift + R: глобальная замена
- ctrl + shift + i: быстрый просмотр содержимого, реализованного методом
- Ctrl + P: просмотреть параметры
- Ctrl + Q: просмотреть описание документа
- shift + F1: просмотр документации по API
- Ctrl + F12: просмотр методов класса
- Ctrl + H: просмотр наследования классов
- Посмотреть присвоение переменных:
shift + ctrl + a: введите поток данных анализа в Здесь - ctrl + alt + H: там вызывался метод View
- ctrl + <>: вы можете найти скобки тела метода
- F3: просмотр выбранного контента
- shift + F3: просмотр содержимого в обратном порядке
- Ctrl + Alt + B: запрос тех классов, которые реализуют интерфейс, где находится курсор
- Ctrl + U: Просмотр родительского класса
- ctrl + E: список недавно отредактированных файлов
- Ctrl + Alt + Home: просмотреть макет и соответствующие классы
- Ctrl + Alt + H: проверить, где вызывается текущий метод
Запустить компиляцию
- Ctrl + F9: сборка
- Shift + F10: бег
Работа с каталогом проекта
- Новый файл и проект: выберите для создания каталога и используйте alt + insert
- Ctrl + Shift + A: введите шоу в проводнике-> открыть соответствующий каталог
- Ctrl + Alt + S: открыть настройки программного обеспечения
- Ctrl + Alt + Shift + S: открыть настройки модуля
- alt + 1: текущая область каталога
- alt + 7: просмотреть список методов текущего класса
- Ctrl + Tab: переключить каталог и вид
- alt + shift + c: просмотр последних изменений проекта
- Ctrl + J: просмотр шаблона Livetemp
Сочетания клавиш
- Если нет операции для завершения операции, вы можете сначала написать todo, вы можете просмотреть ее в окне todo
- F11 определить закладку
- shift + F11: просмотр закладок
- Ctrl + J: быстро вызвать шаблон
- alt + click точка останова: отключить точку останова
- Нажмите в состоянии отладки: переменная вида alt может проверить значение выражения
Комбинация клавиш
- F2: ошибка позиционирования
- alt + enter: исправить ошибку
- alt + mouse: войти в режим редактирования столбца
- Ctrl + W: выбрать слово
- Или другие комбинированные операции
Изменить местоположение
Ctrl + Alt + левая и правая клавиши: это место для редактирования
Источник: russianblogs.com
Статья Создание меню выбора клавишами в терминале с помощью Python
Когда мы пишем какое-то консольное приложение подразумевающее пользовательский выбор, хорошо было бы иметь такой инструмент, который бы создавал нужное нам меню и позволял перемещаться по нему с помощью стрелок на клавиатуре. Ведь это гораздо удобнее, чем просить пользователя ввести какую-либо цифру, соответствующую тому или иному пункту. И такой инструмент есть. Давайте посмотрим, как его реализовать в скрипте Python.
К сожалению, все, что будет описано далее не работает в ОС Windows. Поэтому, речи о кросплатформенности тут не идет. Однако, в Linux данный код работает прекрасно. Давайте создадим небольшой скрипт, который будет использовать меню для пользовательского выбора и запускать те или иные файлы или ссылки в консольном медиаплеере mpv.
Следует сразу же сказать, что данный код не будет работать в терминале IDE PyCharm. В VSCode не знаю, не проверял. В терминале все работает в лучшем виде.
Что потребуется?
Для начала, если вы хотите протестировать код в том виде, в котором он будет представлен в данной статье, нужно установить медиаплеер. В ОС Linux использующих кодовую базу Debian делается это командой:
sudo apt install mpv
Также нам потребуется библиотека, с помощью которой и будет создаваться меню. Установить ее можно набрав команду:
pip install simple-term-menu
Импорт модулей в скрипт
После того, как необходимые библиотеки будут установлены, импортируем нужные модули в скрипт.
import os import subprocess import sys import time from pathlib import Path from simple_term_menu import TerminalMenu
Создание списков и словарей нужных в работе
Следующим шагом, который будет необходим, создадим словарь и список. В словаре мы будем хранить, так как это оболочка над плеером, названия файлов или каналов, если это плейлист. И ссылки на эти файлы или каналы.
Также необходимо создать список, в котором будут храниться названия файлов или каналов в текстовом виде. Этот список будет необходим при создании меню. Добавляем необходимый код в скрипт.
media = dict() options = []
Определение функций оболочки
Теперь давайте определимся с тем, что будет уметь делать оболочка. Не особо много, но это и не главное. Ведь мы не создаем полноценный проигрыватель, а только лишь пишем скрипт для демонстрации возможности создания меню. Поэтому, оболочка будет уметь парсить плейлисты формата m3u, сканировать указанные директории на наличие в них медиафайлов. Ну и пожалуй — все.
Напишем функцию main, в которой будем осуществлять выбор пользователя для выполнения тех или иных действий. Заключим код в блок try — except, чтобы иметь возможность обрабатывать исключения. Выведем информацию для пользователя, что это Главное меню. Затем создадим список, в который запишем названия пунктов будущего меню. Как видите, их в списке три.
Инициализируем класс TerminalMenu в который передадим созданный список с пунктами меню, а также вызовем у данного класса метод show для его отображения. В ответ возвращается индекс пункта меню в используемом списке. Поэтому, если мы хотим обработать действие, нужно по данному индексу забрать из списка его значение. И далее, в зависимости от выбора пользователя запускаем парсинг плейлиста, сканирование директории или инициализируем исключение, с помощью которого будем выходить из функции.
В обработке исключений, которые могут возникнуть при работе с функцией с помощью subprocess запустим код очистки данных в терминале, выведем пользователю сообщение и завершим работу скрипта.
def main(): «»» Главная функция. Выбор пользователя. Запуск сканирования директории или парсинга плейлиста. Запуск меню после сканирования. «»» try: print(f»nГлавное менюn») opt = [«1. Ввести путь к плейлисту», «2.
Открыть директорию», «3. Выход»] ch = TerminalMenu(opt).show() if opt[ch] == «1. Ввести путь к плейлисту»: path = input(«Путь к плейлисту >>> «) if not Path(path).exists() or not Path(path).is_file() or Path(path).suffix != «.m3u» or path == «»: print(«Неверная ссылка») main() open_playlist(path) menu_run() elif opt[ch] == «2. Открыть директорию»: path = input(«Путь к директории >>> «) if not Path(path).exists() or not Path(path).is_dir() or path == «»: print(«Неверная ссылка») main() dir_scan(path) menu_run() elif opt[ch] == «3. Выход»: raise KeyboardInterrupt except (KeyboardInterrupt, TypeError): subprocess.call(«clear», shell=True) print(«nGood By!n») sys.exit(0)
Парсинг плейлиста
Как вы помните, первый пункт меню у нас ввод пути к плейлисту. Для того, чтобы передать данные в меню, его нужно для начала распарсить. А именно, получить названия каналов, а также получить ссылки на них. Тем более, что в плейлисте не обязательно могут быть ссылки на каналы в интернете, а вполне себе ссылки на локальные файлы. Плейлист состоит из трех основных частей.
Первая часть, это заголовок плейлиста: #EXTM3U; вторая часть, расширенная информация о медиафайле: #EXTINF; ссылка на веб-ресурс или локальный файл.
В контексте нашего скрипта нам нужно только последние два параметра. Расширенная информация, из которой мы заберем название медиафайла для меню, и ссылка на медиафайл.
Создадим функцию open_playlist(path: str), которая принимает ссылку на файл. Определим переменные: key и num. В переменной key будет содержаться название канала или файла. В переменной num просто порядковый номер ресурса. Чтобы в меню содержались пронумерованные названия.
key = «» num = 0
Откроем плейлист на чтение. Так как это, по сути, обычный текстовый файл, то ничего особого придумывать не нужно. В цикле проитерируемся по строкам файла. Если строка начинается на #EXTINF, значит это описание медиафайла.
Забираем из него название и присваиваем в переменную key. С помощью continue итерируемся дальше. Если строка начинается со ссылки, увеличиваем счетчик на 1, Добавляем номер к названию медиафайла, добавляем пару ключ значение (название, ссылка) в словарь. А также добавляем название файла в глобальный список options, в котором и хранятся элементы меню.
Заключим код в блок try — except, для того, чтобы обработать ошибку декодирования данных, так как плейлисты могут быть сохранены в кодировке, которая отличается от кодировки utf-8.
def open_playlist(path: str): «»» Функция для парсинга плейлиста. :param path: Путь к плейлисту. «»» key = «» num = 0 try: with open(path, ‘r’, encoding=’utf-8′) as file: for item in file.readlines(): if item.startswith(«#EXTINF»): key = item.split(‘,’)[-1].replace(‘#EXTGRP:’, »).strip() continue elif item.startswith(«http»): num += 1 key = f’. ‘ media.update() options.append(key) except UnicodeDecodeError: print(«Не могу декодировать данные») sys.exit(0)
Функция чтения содержимого директории
Как вы помните, второй пункт в меню выбора, это открытие директории с медиафалами. Создадим функцию dir_scan(path: str), которая на вход принимает ссылку на директорию. Создадим список с расширениями медиафайлов. Я назвал его suf. Конечно же, это далеко не все форматы, которые поддерживает mpv.
Поэтому, если вам нужны какие-то дополнительные форматы, можете добавить их самостоятельно. Подробнее о поддерживаемых форматах можно почитать в документации плеера:
Ссылка скрыта от гостей
. Для нашего скрипта добавленных форматов достаточно.
Создадим список файлов с нужными расширениями в директории с помощью os.listdir. И теперь проитерируемся в цикле по данному списку. Заберем названия файлов и добавим к ним порядковый номер. После этого, добавим пару ключ — значение в словарь. А также в глобальный список options добавим названия файлов для меню.
def dir_scan(path: str): «»» Функция для сканирования файлов в директории. :param path: Путь к директории. «»» # Добавьте нужные форматы. Подробнее о поддерживаемых mpv # форматах см. в документации: https://mpv.io/manual/master/ suf = [«.mp3», «.wav», «.mp4», «.avi»] files = [x for x in os.listdir(path) if Path(x).suffix in suf] for num, file in enumerate(files): name = f’.’ media.update() options.append(name)
Создание и отображение меню из медиафайлов
Теперь нам понадобиться небольшая функция, основной задачей которой будет создание меню из переданного в нее списка, а также его отображение в терминале. Данный код вам уже знаком по отображению меню пользовательского выбора. Создадим функцию menu. На вход она ничего не принимает, а возвращает индекс значения из списка, который соответствует пункту меню.
Данная функция буквально в одну строку. Создаем экземпляр класса TerminalMenu, передаем в него составленный список с пунктами и отображаем с помощью метода show.
def menu(): «»» Функция создания меню. :return: Возвращает индекс выбранного пункта меню в списке. «»» return TerminalMenu(options).show()
Перемещение по меню, выбор пункта и передача для воспроизведения
Для воспроизведения медиафайла или ресурса по ссылке будет служить другая функция. В данной же функции мы будем получать пользовательский выбор, когда он нажмет клавишу Enter на нужном пункте, запускать воспроизведение и после его окончания снова отображать меню со списком файлов.
Создадим функцию menu_run(). На вход она ничего не принимает. Для начала очищаем терминал от постороннего текста с помощью системной команды clear. Выводим сообщение для пользователя о том, что он перед собой видит, а именно плейлист. Получаем при нажатии на пункт меню значение индекса из функции menu и передаем полученное значение в функцию play, которая и будет проигрывать файлы.
Ну и после окончания проигрывания запускаем рекурсивно саму себя.
Также обработаем исключения. В частности, TypeError и KeyboardInterrupt. И та, и та ошибки возникают при прерывании функции с помощью комбинации клавиш «Ctrl+C». В обработке ошибок очистим терминал, очистим список и словарь, после чего вызовем функцию main для отображения Главного меню.
def menu_run(): «»» Функция запуска проигрывания плейлиста. «»» try: subprocess.call(«clear», shell=True) print(f»ПЛЕЙЛИСТ:n(для возврата в ‘Главное меню’ нажмите ‘Ctrl+C’)n») m = menu() play(m) menu_run() except (KeyboardInterrupt, TypeError): subprocess.call(«clear», shell=True) options.clear() media.clear() main()
Проигрывание композиций
В данном скрипте проигрывание композиций осуществляется с помощью медиаплеера mpv. Так как медиаплеер консольный, то при проигрывании, например аудио, управлять им можно только с помощью горячих клавиш. Подробнее о них можно почитать в документации плеера. Я опишу лишь некоторые. Клавиши стрелок. Вверх — вниз: перемотка композиции на минуту.
Клавиши вперед — назад: перемотка на секунды. Клавиши 0 и 9, увеличение/уменьшение громкости. Клавиша q — выход из плеера.
Создадим функцию play(n: int). На вход она принимает индекс элемента списка меню, являющийся целым числом. В переменную m получаем из словаря путь к медиафайлу по ключу, который берется, в свою очередь, из списка по индексу. С помощью subprocess.check_call запускаем воспроизведение медиафайла.
Здесь же устанавливаем процент громкости, который по умолчанию равен 100. subprocess.check_call здесь используется для того, чтобы по окончании композиции или после нажатия клавиши выхода q поймать возвращаемое значение, которое равно 0. Проверяем возвращаемое значение. Если оно равно 0, увеличиваем переданный в функцию индекс на единицу пишем сообщение в терминал для пользователя, если он желает выйти. Ждем две секунды и рекурсивно запускаем функцию с новым значением индекса, что будет означать проигрывание следующей композиции из списка.
Также необходимо обработать исключения, которые будут возникать при нажатии сочетания клавиш «Ctrl+C» или невозможности открыть медиаресурс. Если возникает IndexError, это означает, что достигнут конец плейлиста. Сюда можно добавить простое обнуление индекса и рекурсивный запуск функции по плейлисту с самого начала.
Я же просто сообщаю об этом пользователю и возвращаюсь в меню со списком медиафайлов. Если произошло клавиатурное прерывание, просто возвращаемся в меню со списком. Если же возникла ошибка открытия медиаресурса, делаем то же самое, но с другим сообщением. По большому счету можно все эти исключение объединить в один блок Exception, выводить усредненное сообщение и просто выходить в меню со списком медиафайлов.
def play(n: int): «»» Функция проигрывания плейлиста с указанной позиции. :param n: Индекс пункта меню в списке. «»» try: m = media[options[n]] s = subprocess.check_call(f»mpv —volume=50 »», shell=True) if s == 0: n += 1 print(«nДля выхода в плейлист нажмите ‘Ctrl+C’n») time.sleep(2) play(n) except subprocess.CalledProcessError: print(«nОШИБКА ОТКРЫТИЯ ССЫЛКИn») time.sleep(2) menu_run() except IndexError: print(«Конец плейлиста») time.sleep(2) menu_run() except KeyboardInterrupt: menu_run()
Вот, собственно и все. Напомню, что данный код не будет работать в IDE PyCharm из за особенностей встроенного терминала. В VSCode не проверял. В терминале же все работает отлично.
Полный код скрипта создания меню и проигрывания медиафайлов
«»» Данный код не является полноценным плеером, а служит лишь для иллюстрации возможности использования терминального меню. Для работы с меню необходимо установить пакет: simple-term-menu. Установка пакета: pip install simple-term-menu Для работы данного кода требуется установка медиа-плеера mpv. Установка в Linux Mint/Debian/Ubuntu: sudo apt install mpv В ОС Windows библиотека использующаяся в скрипте не работает.
Меню не работает при запуске в IDE, по крайней мере в PyCharm. VSCode не тестировался.
Для корректной работы код необходимо запускать в терминале. «»» import os import subprocess import sys import time from pathlib import Path from simple_term_menu import TerminalMenu media = dict() options = [] def open_playlist(path: str): «»» Функция для парсинга плейлиста. :param path: Путь к плейлисту. «»» key = «» num = 0 try: with open(path, ‘r’, encoding=’utf-8′) as file: for item in file.readlines(): if item.startswith(«#EXTINF»): key = item.split(‘,’)[-1].replace(‘#EXTGRP:’, »).strip() continue elif item.startswith(«http»): num += 1 key = f’. ‘ media.update() options.append(key) except UnicodeDecodeError: print(«Не могу декодировать данные») sys.exit(0) def dir_scan(path: str): «»» Функция для сканирования файлов в директории. :param path: Путь к директории. «»» # Добавьте нужные форматы. Подробнее о поддерживаемых mpv # форматах см. в документации: https://mpv.io/manual/master/ suf = [«.mp3», «.wav», «.mp4», «.avi»] files = [x for x in os.listdir(path) if Path(x).suffix in suf] for num, file in enumerate(files): name = f’.’ media.update() options.append(name) def menu(): «»» Функция создания меню. :return: Возвращает индекс выбранного пункта меню в списке. «»» return TerminalMenu(options).show() def play(n: int): «»» Функция проигрывания плейлиста с указанной позиции. :param n: Индекс пункта меню в списке. «»» try: m = media[options[n]] s = subprocess.check_call(f»mpv —volume=50 »», shell=True) print(s) if s == 0: n += 1 print(«nДля выхода в плейлист нажмите ‘Ctrl+C’n») time.sleep(2) play(n) except subprocess.CalledProcessError: print(«nОШИБКА ОТКРЫТИЯ ССЫЛКИn») time.sleep(2) menu_run() except IndexError: print(«Конец плейлиста») time.sleep(2) menu_run() except KeyboardInterrupt: menu_run() def menu_run(): «»» Функция запуска проигрывания плейлиста. «»» try: subprocess.call(«clear», shell=True) print(f»ПЛЕЙЛИСТ:n(для возврата в ‘Главное меню’ нажмите ‘Ctrl+C’)n») m = menu() play(m) menu_run() except (KeyboardInterrupt, TypeError): subprocess.call(«clear», shell=True) options.clear() media.clear() main() def main(): «»» Главная функция.
Выбор пользователя. Запуск сканирования директории или парсинга плейлиста. Запуск меню после сканирования. «»» try: print(f»nГлавное менюn») opt = [«1. Ввести путь к плейлисту», «2. Открыть директорию», «3.
Выход»] ch = TerminalMenu(opt).show() if opt[ch] == «1. Ввести путь к плейлисту»: path = input(«Путь к плейлисту >>> «) if not Path(path).exists() or not Path(path).is_file() or Path(path).suffix != «.m3u» or path == «»: print(«Неверная ссылка») main() open_playlist(path) menu_run() elif opt[ch] == «2. Открыть директорию»: path = input(«Путь к директории >>> «) if not Path(path).exists() or not Path(path).is_dir() or path == «»: print(«Неверная ссылка») main() dir_scan(path) menu_run() elif opt[ch] == «3. Выход»: raise KeyboardInterrupt except (KeyboardInterrupt, TypeError): subprocess.call(«clear», shell=True) print(«nGood By!n») sys.exit(0) if __name__ == «__main__»: main()
Вот собственно немного скриншотов:
Источник: codeby.net