Python консоль в приложении

7 уровней построения интерфейсов командной строки на Python

Написание скриптов Python для создания интерфейсов командной строки (CLI) — широко используемый метод для DevOps и бэкенд разработки.

Ключом к реализации CLI в Python является встроенный модуль argparse . Он предоставляет все необходимые функции и позволяет использовать скрипт Python в качестве команды bash .

В этой статье будут представлены некоторые важные моменты создания CLI с помощью Python на 7 уровнях сложности.

1. Запускаем базовый интерфейс командной строки с модулем argparse

Прежде всего, давайте создадим файл с именем test.py и сделаем простой парсер аргументов:

import argparse parser = argparse.ArgumentParser() parser.parse_args()

После того, как мы определили этот парсер, теперь мы можем получать аргументы из командной строки. Каждый экземпляр ArgumentParser содержит параметр —help (или -h качестве ярлыка) для вывода полезной информации.

optional arguments: -h, —help show this help message and exit

Однако из-за того, что мы не определили другие аргументы, следующий ввод вызовет ошибку:

test.py: error: unrecognized arguments: 9

2. Определяем позиционные аргументы

В командах bash есть два типа аргументов. Один позиционный, другой необязательный.

Например, команда cp имеет два позиционных аргумента:

source_file указывает источники копируемого файла. И аргумент dest_file указывает место для копирования файла.

Мы также можем определить позиционный аргумент для нашего интерфейса командной строки Python:

import argparse parser = argparse.ArgumentParser() parser.add_argument("num", type=int) args = parser.parse_args() print(args.num**2)

Как видно из приведенного выше кода, мы определили имя аргумента как num и указали его тип как int .

Теперь, если ввод из терминала является допустимым целым числом, наш скрипт Python будет печатать его квадрат:

3. Добавляем больше полезной информации и описание

Как и многие команды Linux, хороший интерфейс командной строки должен предоставлять пользователям достаточно информации с помощью опции —help .

С этой целью мы можем указать специальную информацию для соответствующих функций модуля argparse .

import argparse parser = argparse.ArgumentParser(prog='get_square',description='A CLI to calculate the square of an integer.') parser.add_argument("num", type=int, help='An integer that needs to get the square value.') args = parser.parse_args() print(args.num**2)

Как показано выше, мы добавили информацию о программе и описании в экземпляр ArgumentParser , чтобы дать ему имя и подробное описание. Кроме того, мы дали функции add_argument() справочное сообщение, чтобы наши пользователи знали, для чего нужен этот аргумент.

Теперь давайте снова посмотрим на вывод опции -h :

Читайте также:  Объявление типов переменных python

A CLI to calculate the square of an integer.

num An integer that needs to get the square value.

-h, —help show this help message and exit

Это удобнее и информативнее, не правда ли? 🙂

4. Определяем необязательные аргументы

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

Встроенная опция —help всех экземпляров ArgumentParser является необязательным аргументом. Мы можем добавить еще одну к предыдущему примеру:

import argparse parser = argparse.ArgumentParser(prog='get_square',description='A CLI to calculate the square of an integer.') parser.add_argument("num", type=int, help='An integer that needs to get the square value.') parser.add_argument('--verbose',help='Print more info.') args = parser.parse_args() if args.verbose: print(f'The square of is ') else: print(args.num**2)

Вышеприведенная программа добавила необязательный аргумент с именем:

—verbose . Если для этого аргумента есть значение, программа распечатает более подробную информацию для расчета.

Теперь давайте попробуем его использовать:

$ python test.py 9 —verbose 1

$ python test.py 9 —verbose 90908

usage: get_square [-h] [—verbose VERBOSE] num

get_square: error: argument —verbose: expected one argument

Досадная проблема заключается в том, что мы должны указать значение для этой опции, чтобы она работала, независимо от того, какое это значение. Если значения вообще нет, как показано выше, появится сообщение об ошибке.

Это связано с тем, что args.verbose имеет значение None , если мы используем его напрямую, не присваивая ему никаких значений.

Это не так удобно, как другие команды Linux. Поэтому нам нужно оптимизировать его через параметры action .

5. Определяем специальные действия для необязательных аргументов

Давайте немного изменим эту строку кода:

parser.add_argument('--verbose',help='Print more info.', action='store_true')

Параметр action функции add_argument() может указать, как обрабатывать значения этой опции.

В нашем случае store_true означает, что если указан параметр, программа по умолчанию присвоит значение True для args.verbose .

А затем выполните скрипт с опцией —verbose напрямую:

Помимо store_true или store_false , Python также предоставляет другие варианты параметров action . Давайте попробуем несколько:

Используйте «store_const» action

Мы можем использовать параметр store_const в качестве действия и присвоить const необязательному аргументу:

parser.add_argument('--verbose',help='Print more info.', action='store_const', const=1)

Поэтому значение args.verbose всегда будет равным 1.

Параметр count подсчитывает, сколько раз встречается необязательный аргумент. Давайте отредактируем наш код и попробуем:

import argparse parser = argparse.ArgumentParser(prog='get_square',description='A CLI to calculate the square of an integer.') parser.add_argument("num", type=int, help='An integer that needs to get the square value.') parser.add_argument('--verbose',help='Print more info.', action='count') args = parser.parse_args() if args.verbose==2: print(f'The square of is ') elif args.verbose==1: print(f"^2 == ") else: print(args.num**2)

За это время мы можем определить, насколько подробным будет вывод, по количеству опций —verbose :

$ python test.py 9 —verbose —verbose

$ python test.py 9 —verbose 9^2 == 81

Используйте «append» action

Действие append сохраняет список и добавляет в список каждое значение аргумента. В некоторых случаях будет полезно хранить несколько значений необязательного аргумента.

Чтобы использовать его, измените следующую строку предыдущего кода Python:

parser.add_argument('--verbose',help='Print more info.', action='append')

Теперь мы можем добавить несколько значений аргумента —verbose :

$ python test.py 9 —verbose 2 —verbose 3 —verbose 5

The verbose values are [‘2’, ‘3’, ‘5’]. The square of 9 is 81

6. Определяем ярлыки необязательных аргументов

Немного скучно много раз вводить —verbose . Как ярлык -h для опции —help . Мы также можем определить ярлык для нашей опции —verbose следующим образом:

parser.add_argument('-v','--verbose',help='Print more info.', action='count')

После определения ярлыка -v мы можем использовать его напрямую:

7. Работа с файлами в командной строке

Модуль argparse также может обрабатывать аргументы файлового типа, что делает удобным выполнение некоторых основных файловых операций через интерфейсы командной строки.

Чтение файла через командную строку

Если мы хотим отображать содержимое файла построчно на терминале, мы можем написать скрипт Python следующим образом:

import argparse parser = argparse.ArgumentParser() parser.add_argument('f', type=argparse.FileType('r')) args = parser.parse_args() for line in args.f: print(line.strip())

Теперь давайте выполним этот скрипт Python на терминале и передадим test.txt в качестве аргумента файлового типа:

Yang is writing a post. Yang is writing on Medium.

Как показано выше, файл test.txt состоит из двух строк предложений. Они были правильно напечатаны на терминале с помощью нашего скрипта Python.

Запись данных в файл через командную строку

Чтобы записать данные в файл, нам нужно изменить оператор с r на w :

import argparse parser = argparse.ArgumentParser() parser.add_argument('f', type=argparse.FileType('w')) args = parser.parse_args() f = args.f f.write('Yang is writing') f.close()

Приведенный выше код запишет предложение «Ян пишет» в файл, назначенный через интерфейс командной строки. Использование его заключается в следующем:

После выполнения вышеуказанной команды файл «test.txt» будет содержать одну строку предложения «Ян пишет».

Заключение

Освоение модуля argparse в Python поможет нам разрабатывать и реализовывать простые в использовании интерфейсы командной строки с помощью сценариев Python.

В тех случаях, когда нам нужен настраиваемый интерфейс командной строки, но мы не утруждаем себя написанием сложных сценариев bash, этот модуль Python — наш лучший друг. 👍

Источник

Python console

Python console enables executing Python commands and scripts line by line, similar to your experience with Python Shell.

Working with Python console

The console appears as a tool window every time you choose the corresponding command on the Tools menu. You can assign a shortcut to open Python console: press Control+Alt+S , navigate to Keymap , specify a shortcut for Main menu | Tools | Python or Debug Console .

The main reason for using the Python console within PyCharm is to benefit from the main IDE features, such as code completion, code analysis, and quick fixes.

Code completion in the Python console

You can use up and down arrow keys to browse through the history of executed commands, and repeat the desired ones. To preview the variable values calculated in the course of the execution, click and check the Special Variables list.

Show variables in the Python console

The console is available for all types of Python interpreters and virtual environments, both local and remote.

Preview a variable as an array

When your variables are numpy arrays or dataframes, you can preview them as an array in a separate window. To try it, do one of the following:

  • Click the link View as Array / View as DataFrame : Viewing variables in array when running from Python console
  • From the context menu of a variable, choose View as Array / View as DataFrame : Viewing variables in data frames when running from Python console

The variable will be opened in the Data tab of the SciView window.

View an array or dataframe in a separate window

Run source code from the editor in console

  1. Open file in the editor, and select a fragment of code to be executed.
  2. From the context menu of the selection, choose Execute Selection in Python Console , or press Alt+Shift+E : Context menu for executing the code selectionWith no selection, the command changes to Execute line in console . Choose this command from the context menu, or press Alt+Shift+E . The line at caret loads into the Python console, and runs.
  3. Watch the code selection execution: Execution of the code selection in the console

By default, the Python console executes Python commands using the Python interpreter defined for the project. However, you can assign an alternative Python interpreter.

Run asyncio coroutines

  1. In the editor, select a fragment of code which contains the definition of an asyncio coroutine.
  2. From the context menu, select Execute Selection in Python Console , or press Alt+Shift+E : Selecting and executing asyncio coroutines in the Python console
  3. After the code is executed on the Python console, run the coroutine by using the await keyword: Execution of the asyncio coroutine in the console

Configure Python console settings

Search an alternative Python interpreter

  1. In the Settings dialog ( Control+Alt+S ), select Build, Execution, Deployment | Console | Python Console .
  2. Select any available interpreter from the Python interpreter list. Note that you cannot introduce a new interpreter here. If you want to come up with the new interpreter, you need to create it first.
  3. In needed, click the Configure Interpreters link to inspect the list of the installed packages and add new ones. Mind the code in the Starting script area. It contains the script that will be executed after you open the Python console. Use it to pre-code some required Python commands.

When working on several Python scripts, you might want to execute each in a separate Python console.

Run several Python consoles

Rename the Python console

  1. Click to add a new Python console.
  2. By default, each console has the name Python Console with an index. To make a console reflect the script you’re running, right-click the console tab, select Rename Console , and enter any meaningful name.

All the commands you’re running in the Python console are executed one by one. If the commands require substantial time to get executed, you might want to preview and manage the execution queue.

Manage the command execution queue

Console command queue

  1. Go to Settings | Build, Execution, Deployment | Console and enable the Command queue for Python Console checkbox.
  2. Click on the console toolbar to open the queue.
  3. In the Python Console Command Queue dialog, review the list of commands. If needed, click to delete the command from the queue.

Note, once the command is executed, it disappears from the queue. To preview all previously executed commands browse the console history ().

Источник

Оцените статью