Randomly change the prompt in the Python interpreter
Question:
It’s kind of boring to always see the >>>
prompt in Python. What would be the best way to go about randomly changing the prompt prefix?
I imagine an interaction like:
This is a tobbaconist!>> import sys
Sorry?>> import math
Sorry?>> print sys.ps1
Sorry?
What?>>
Answers:
Nice question. The >>>
prompt is in sys.ps1
, the ...
in sys.ps2
. The next question would be how to change this randomly. Just as a demonstration of changing it by hand:
>>> import sys
>>> sys.ps1 = '<<<'
<<<sys.ps1 = '<<< '
<<< sys.ps2 = '.?. '
<<< for i in line:
.?.
For changing the prompt, we use
>>>import sys
>>>sys.ps1 = '=>'
=>
Now the way to do it randomly would be something like this:
import random
import sys
random_prompts = ['->', '-->', '=>', 'Hello->']
sys.ps1 = random.choice(random_prompts)
To execute this when your python interpreter starts, you can follow this guide: https://docs.python.org/2/tutorial/appendix.html#the-interactive-startup-file
Try this:
>>> 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
According to the docs, if you assign a non-string object to sys.ps1
then it will evaluate the str
function of it each time:
If a non-string object is assigned to either variable, its str() is
re-evaluated each time the interpreter prepares to read a new
interactive command; this can be used to implement a dynamic prompt.
Well now it’s obvious, you should make it dynamic! Make an object with a __str__
method where you can place any logic you want:
class Prompt:
def __str__(self):
# Logic to randomly determine string
return string
You can also make changes or insert things into this class as you go too. So for example, you could have a list of messages in Prompt
that you append to, or change, and that will affect the console message.
It’s kind of boring to always see the >>>
prompt in Python. What would be the best way to go about randomly changing the prompt prefix?
I imagine an interaction like:
This is a tobbaconist!>> import sys
Sorry?>> import math
Sorry?>> print sys.ps1
Sorry?
What?>>
Nice question. The >>>
prompt is in sys.ps1
, the ...
in sys.ps2
. The next question would be how to change this randomly. Just as a demonstration of changing it by hand:
>>> import sys
>>> sys.ps1 = '<<<'
<<<sys.ps1 = '<<< '
<<< sys.ps2 = '.?. '
<<< for i in line:
.?.
For changing the prompt, we use
>>>import sys
>>>sys.ps1 = '=>'
=>
Now the way to do it randomly would be something like this:
import random
import sys
random_prompts = ['->', '-->', '=>', 'Hello->']
sys.ps1 = random.choice(random_prompts)
To execute this when your python interpreter starts, you can follow this guide: https://docs.python.org/2/tutorial/appendix.html#the-interactive-startup-file
Try this:
>>> 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
According to the docs, if you assign a non-string object to sys.ps1
then it will evaluate the str
function of it each time:
If a non-string object is assigned to either variable, its str() is
re-evaluated each time the interpreter prepares to read a new
interactive command; this can be used to implement a dynamic prompt.
Well now it’s obvious, you should make it dynamic! Make an object with a __str__
method where you can place any logic you want:
class Prompt:
def __str__(self):
# Logic to randomly determine string
return string
You can also make changes or insert things into this class as you go too. So for example, you could have a list of messages in Prompt
that you append to, or change, and that will affect the console message.