Python 如何同步更改sys.stdin的颜色?
我编写了一个简单的程序,可以用作Python的主题 标准的颜色是白色,标准的颜色是绿色,标准的颜色是红色 该程序运行良好,但我想做的是,当用户键入一个关键字(如“def”)时,该关键字的颜色应该像在Vim中键入“def”一样更改 我想用键盘记录器来捕捉键盘。但我仍然没有找到一个有用的方法来同步更改关键字的颜色 请看一下代码,给我一个想法 非常感谢您的帮助 代码:Python 如何同步更改sys.stdin的颜色?,python,Python,我编写了一个简单的程序,可以用作Python的主题 标准的颜色是白色,标准的颜色是绿色,标准的颜色是红色 该程序运行良好,但我想做的是,当用户键入一个关键字(如“def”)时,该关键字的颜色应该像在Vim中键入“def”一样更改 我想用键盘记录器来捕捉键盘。但我仍然没有找到一个有用的方法来同步更改关键字的颜色 请看一下代码,给我一个想法 非常感谢您的帮助 代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import sy
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import colorama
CODE = ""
SIZE = 0
TAB = " " * 4
colorama.init(autoreset=False)
sys.stdout.write(colorama.Fore.WHITE)
while True:
if SIZE >= 1:
LINE = input("... {}".format(TAB * SIZE))
CODE += "{}{}\n".format(TAB * SIZE, LINE)
if LINE == '':
if SIZE == 0:
try:
sys.stdout.write(colorama.Fore.GREEN)
exec(CODE)
sys.stdout.write(colorama.Fore.WHITE)
except BaseException as ERR:
sys.stderr.write("{}{}\n".format(colorama.Fore.RED, ERR))
sys.stdout.write(colorama.Fore.WHITE)
CODE = ""
SIZE = 0
else:
SIZE -= 1
continue
elif LINE.endswith(":"):
SIZE += 1
else:
continue
else:
LINE = input(">>> {}".format(TAB * SIZE))
CODE += "{}{}\n".format(TAB * SIZE, LINE)
if not LINE.endswith(":"):
if LINE == "exit()" or LINE == "quit()":
break
elif LINE == "clear()":
os.system("cls" if os.name == "nt" else "clear")
CODE = ""
try:
sys.stdout.write(colorama.Fore.GREEN)
exec(CODE)
sys.stdout.write(colorama.Fore.WHITE)
except BaseException as ERR:
sys.stderr.write("{}{}\n".format(colorama.Fore.RED, ERR))
sys.stdout.write(colorama.Fore.WHITE)
CODE = ""
SIZE = 0
else:
SIZE += 1
我按如下方式完成终端。看起来很漂亮<代码>O(∩_∩)O哈哈哈~代码> 要突出显示
def
,我执行以下操作:
## Replace "def" with "colorful def"
if line.endswith(":") and "def " in line:
sys.stderr.write("\x1b[1A\x1b[2K" + tag + line.replace("def ","\033[92mdef\033[0m ")+"\n")
我完成了我的终端如下。看起来很漂亮!
O(∩_∩)O哈哈哈~代码>
要突出显示def
,我执行以下操作:
## Replace "def" with "colorful def"
if line.endswith(":") and "def " in line:
sys.stderr.write("\x1b[1A\x1b[2K" + tag + line.replace("def ","\033[92mdef\033[0m ")+"\n")
这不是那么困难,我会在我的电脑在handOk时试试,谢谢,我会等的。对不起,我错了。我误解了你的想法。我以为你想彩色打印
,但你想更改回复
。为什么不试试ipython呢?如果重定向IO,打印
,也许可以。我用自定义彩色打印ode>\33[m xxx\33[m
左右。(请原谅我的英语不好)我会试试IPython。更改标准输出的颜色没有问题。但是更改输入()的颜色不象我想的那么容易。也许有一个简单的方法,或者有一个我不知道的模块。你知道这个操作的任何模块吗?没有那么难,我会在我的电脑处于handOk时尝试,谢谢,我会等待。对不起,我错了。我不理解你的想法。我以为你想彩色打印
,但你想更改REPL
。为什么不试试ipython?如果重定向IO,print
也许可以。我使用\33[m xxx\33[m
左右自定义彩色打印。(请原谅我的英语不好)我会试试ipython。我对更改标准输出的颜色没有问题。但是更改输入的颜色()这并不像我想的那么容易。也许有一个简单的方法,或者有一个我不知道的模块。你知道这个操作的任何模块吗?我想做的不是给sys.stdout或sys.stderr着色。问题解决了。看,是的,我确实用颜色编码的关键字
替换了最后一行。虽然它不是那么优雅,但它可以工作这对我来说很好。我使用正则表达式重复关键字,并使用自定义彩色日志类对sys.stdout/sys.stderr着色,使其功能强大。换句话说,我只使用内置库(sys、os、re、time),没有其他第三方库。
。顺便说一句,谢谢你给我灵感的原始代码。我想做的不是为sys.stdout或sys.stderr着色。问题解决了。看,是的,我确实用颜色编码关键字
替换了最后一行。虽然它不是很优雅,但对我来说效果很好。而且我使用正则表达式重复关键字,并使用自定义彩色日志类对sys.stdout/sys.stderr着色,从而使其功能强大。换句话说,我只使用内置库(sys、os、re、time),而不使用其他第三方库。
。顺便说一句,感谢您的原始代码给了我灵感。