Рубрики
Без рубрики

Персонализируйте запрос на python

Персонализация-это то, что мы все любим. В этой статье мы узнаем, как мы могли бы персонализировать приглашение интерпретатора Python >>>

Автор оригинала: Arpit Bhayani.

>>> мы видим, когда запускается интерактивная оболочка Python, называется строкой приглашения. Обычно строка приглашения указывает на то, что интерактивная оболочка теперь готова принимать новые команды.

Python 2.7.10 (default, Feb 22 2019, 21:55:15)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

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

>>> def foo(a, b):
...     return a + b
...
>>>

Строки приглашения определяются в модуле sys как ps1 и ps2 , и, как и любой другой атрибут, мы можем изменить значения sys.ps1 и sys.ps2 , и изменения вступают в силу немедленно, и в результате приглашение, которое мы видим в оболочке, изменяется на новое значение.

>>> import sys
>>> sys.ps1 = '::: '
:::

Из приведенного выше примера мы видим, что изменение значения sys.ps1 на ::: изменяет приглашение на ::: .

Поскольку интерактивная оболочка работает в терминале, мы можем раскрасить и отформатировать ее с помощью bash color format , как показано ниже

import sys
sys.ps1 = "\033[1;33m>>>\033[0m "
sys.ps2 = "\033[1;34m...\033[0m "

Приведенный выше фрагмент кода делает нашу основную строку запроса желтой, а вторичную строку запроса-синей. Вот как это выглядит

Цветная подсказка Python

Динамические строки подсказок

В документации говорится, что если мы назначаем нестроковый объект ps1 или ps2 , то Python запрашивает, вызывая str() на объекте каждый раз, когда отображается приглашение. Теперь мы создаем некоторое динамическое приглашение с сохранением состояния, определяя класс и переопределяя метод __str__ .

Ниже мы реализуем IPython like prompt, где номер инструкции выполнения хранится в члене строке класса и увеличивается при каждом отображении основного запроса.

# -*- coding: utf-8 -*-
import sys

class IPythonPromptPS1(object):
  def __init__(self):
    self.line = 0

  def __str__(self):
    self.line += 1
    return "\033[92mIn [%d]:\033[0m " % (self.line)

sys.ps1 = IPythonPromptPS1()
sys.ps2 = "    \033[91m...\033[0m "

Приведенный выше фрагмент кода делает запрос похожим на это

приглашение ipython

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

Поэтому мы сбрасываем фрагмент кода в файл, скажем ipython.py и экспорт PYTHONSTARTUP как

export PYTHONSTARTUP="$HOME/ipython.py"

Теперь каждый раз, когда мы запускаем нашу интерактивную оболочку Python, она будет выполнять файл ipython.py и установите необходимые строки приглашения.

Объединив все вышесказанное, я создал утилиту под названием py-prompts . Вот краткий обзор тем, которые содержатся в пакете.

Довольно Питон Подсказывает GIF

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

Эта статья была первоначально опубликована на моем блог – Персонализируйте приглашение на python .

Статьи, которые могут вас заинтересовать:

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

Подпишитесь на рассылку новостей подмышек