37 votes

Changer aléatoirement l'invite dans l'interpréteur Python

C'est assez ennuyeux de toujours voir l'invite >>> en Python. Quel serait le meilleur moyen de changer le préfixe d’invite de manière aléatoire?

J'imagine une interaction du genre:

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

67voto

SuperBiasedMan Points 2539

Selon les docs, si vous affectez une chaîne non l'objet d' sys.ps1 puis elle permettra d'évaluer l' str fonction de chaque fois:

Si un non-objet string est assignée à la variable, son str() est réévalué chaque fois que l'interprète se prépare à lire un nouveau de commande interactive, ce qui peut être utilisé pour mettre en œuvre une invite dynamique.

Eh bien maintenant, c'est évident, vous devez le rendre dynamique! Créer un objet avec un __str__ méthode où vous pouvez placer toute logique que vous souhaitez:

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

Vous pouvez également apporter des modifications ou insérer des choses dans cette classe que vous allez trop. Ainsi, par exemple, vous pourriez avoir une liste de messages en Prompt que vous ajoutez à, ou à modifier, et qui affectera le message de la console.

21voto

Klaus D. Points 3730

Essaye ça:

 >>> 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
 

19voto

Yash Mehrotra Points 1247

Pour changer l'invite, nous utilisons

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

Maintenant, la façon de le faire au hasard serait quelque chose comme ceci:

 import random
import sys

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

Pour exécuter ceci lorsque votre interpréteur python démarre, vous pouvez suivre ce guide: https://docs.python.org/2/tutorial/appendix.html#the-interactive-startup-file

8voto

user1587329 Points 91

Bonne question. L'invite >>> est exprimée en sys.ps1 , les ... en sys.ps2 . La prochaine question serait de savoir comment changer cela au hasard. Juste comme une démonstration de le changer à la main:

 >>> import sys
>>> sys.ps1 = '<<<'
<<<sys.ps1 = '<<< '
<<< sys.ps2 = '.?. '
<<< for i in line:
.?. 
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X