Произвольно изменить подсказку в интерпретаторе Python

Скучно всегда видеть >>> подскажите в Python. Каков наилучший способ случайного изменения префикса приглашения?

Я представляю взаимодействие как:

This is a tobbaconist!>> import sys
Sorry?>> import math
Sorry?>> print sys.ps1
Sorry?
What?>>

4 ответа

Решение

Согласно документации, если вы назначаете нестроковый объект sys.ps1 тогда он оценит str Функция этого каждый раз:

Если какой-либо переменной назначен нестроковый объект, его str() переоценивается каждый раз, когда интерпретатор готовится прочитать новую интерактивную команду; это может быть использовано для реализации динамического запроса.

Ну, теперь это очевидно, вы должны сделать это динамичным! Сделать объект с __str__ метод, в котором вы можете разместить любую логику, которую вы хотите:

class Prompt:
    def __str__(self):
        # Logic to randomly determine string
        return string

Вы также можете вносить изменения или вставлять вещи в этот класс по ходу дела. Так, например, вы могли бы иметь список сообщений в Prompt что вы добавляете или изменяете, и это повлияет на сообщение консоли.

Попробуй это:

>>> import sys
>>> import random
>>> class RandomPrompt(object):
...     prompts = 'hello >', 'hi >', 'hey >'
...     def __repr__ (self): return random.choice(self.prompts)
... 
>>> sys.ps1 = RandomPrompt()
hello >1
1
hi >2
2

Для изменения подсказки мы используем

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

Теперь способ сделать это случайным образом будет примерно таким:

import random
import sys

random_prompts = ['->', '-->', '=>', 'Hello->']
sys.ps1 = random.choice(random_prompts)

Чтобы выполнить это при запуске вашего интерпретатора Python, вы можете следовать этому руководству: https://docs.python.org/2/tutorial/appendix.html

Хороший вопрос >>> подсказка находится в sys.ps1, ... в sys.ps2, Следующий вопрос будет, как изменить это случайно. Так же, как демонстрация его изменения вручную:

>>> import sys
>>> sys.ps1 = '<<<'
<<<sys.ps1 = '<<< '
<<< sys.ps2 = '.?. '
<<< for i in line:
.?. 
Другие вопросы по тегам