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?>>
Python is an interpreter language. It means it executes the code line by line. Python provides a Python Shell, which is used to execute a single Python command and display the result.
We can use the Python interpreter to run our programs as and when we write the code. First, we have to open a command line. Linux/BSD/Mac users can open up a shell emulator of their choice such as konsole or gnome-terminal.
The interactive Python mode lets you run your script instantly via the command line without using any code editor or IDE. To run a Python script interactively, open up your command line and type python. Then hit Enter. You can then go ahead and write any Python code within the interactive mode.
Go to File -> New Window (Ctrl+N) and a window where you can write your program will pop up.
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.
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
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
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:
.?.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With