这可能是一个愚蠢的问题,一旦我搞清楚,我可能最终会删除它,但我发誓我记得在Python 3.5文档中,如何在Python交互式提示符上更改>>>
,例如如何调用help()
将把它改为help>
。但出于某种原因,当我回去试图记住时,我却找不到它的指示。有谁知道这是可能的,还是我只想象事情?
谢谢
你没记错的。
它位于sys模块(sys.ps1和sys.ps2)中:
指定解释器的主要和辅助提示的字符串。仅在解释器处于交互模式时才定义这些。在这种情况下,它们的初始值是“>>>”和“......”。如果将非字符串对象分配给任一变量,则每次解释器准备读取新的交互式命令时,都会重新评估其str();这可以用来实现动态提示。
例如:
>>> import sys >>> sys.ps1 = "3.5>>> " 3.5>>> sys.ps2 = "3.5... " 3.5>>>
很高兴将其设置为:
将其粘贴到您的bash shell中:
tee ~/.pyrc <<EOF
#!/usr/bin/env python3
import sys
sys.ps1='\x1b[1;49;33m>>>\x1b[0m ' # bright yellow
sys.ps2='\x1b[1;49;31m...\x1b[0m ' # bright red
#sys.ps1='\x1b[33m>>>\x1b[0m ' # dark yellow
#sys.ps2='\x1b[31m...\x1b[0m ' # dark red
# For easy copy/paste of proper code, use a blank or space:
#sys.ps1=' '
#sys.ps2=' '
EOF
# Then do this:
chmod 755 ~/.pyrc
最后将这一行添加到你的~/.bash_profile
:
export PYTHONSTARTUP=~/.pyrc
请享用!
如果你在Windows(cmd.exe
)并且你想要一个彩色提示,你可以使用colorama
,但有一些警告。如果你在你的colorama.init
中调用PYTHONSTARTUP
并将sys.ps1
分配给包含着色转义码的字符串,它将无效。但是,当您使用包含着色转义码的字符串调用print
时,彩色输出会起作用。
幸运的是,提出sys.ps1
的Python人员慷慨(或聪明?)足以让你使用任何对象作为ps1
,而不仅仅是字符串。然后使用其__str__
方法将分配的对象转换为字符串。这意味着您可以定义自己的类,例如。 Prompt
,并在其__str__
方法中做任何事情,包括写入colorama-wrapped stdout(这将起作用!)。然后你只需返回一个空字符串。
这个事实带给你一个很好的奖励 - 你也可以使用非常量提示。你想在你的Python shell中使用bash中的日期吗?没问题。
import sys
import datetime
import colorama
colorama.init(autoreset=True)
class Prompt:
def __str__(self):
print(self.prompt, end='')
return ''
class PS1(Prompt):
@property
def prompt(self):
return '{brace_c}[{time_c}{time}{brace_c}]{prompt_c}>>> '.format(
brace_c = colorama.Fore.BLACK + colorama.Style.BRIGHT,
# style is preserved, so the following are also bright:
prompt_c = colorama.Fore.LIGHTYELLOW_EX,
time_c = colorama.Fore.BLACK,
time = datetime.datetime.now().strftime('%H:%M'),
)
sys.ps1 = PS1()
虽然这很好用,但它是一种相当hacky的方式,因为__str__
方法的预期目的是返回一个str
实例。因此,当你用sys.ps2
做同样的事情时,它会中断。 Python解释器期望__str__
方法没有副作用,并且在打印PS1时显然评估str(sys.ps1)
和str(sys.ps2)
,而在打印PS2时,使用已经评估(和保存)的str(sys.ps2)
值。结果是,如果你创建一个类似于上面的PS2
的PS1
类,当你应该只看到PS1时,你会看到PS1和PS2,当你应该看到PS2时你什么都看不见。另一种情况不适用的情况是多个线程/进程正在写入控制台。然后来自几个线程的输出是交错的,虽然这也可能发生在正常的PS1上,但这种黑客使它更糟糕。
在这个简单的例子中它并没有那么糟糕(没有交错,只有混乱的颜色),但如果你得到“正确”的时间,它可能会更糟。