Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何同步更改sys.stdin的颜色?_Python - Fatal编程技术网

Python 如何同步更改sys.stdin的颜色?

Python 如何同步更改sys.stdin的颜色?,python,Python,我编写了一个简单的程序,可以用作Python的主题 标准的颜色是白色,标准的颜色是绿色,标准的颜色是红色 该程序运行良好,但我想做的是,当用户键入一个关键字(如“def”)时,该关键字的颜色应该像在Vim中键入“def”一样更改 我想用键盘记录器来捕捉键盘。但我仍然没有找到一个有用的方法来同步更改关键字的颜色 请看一下代码,给我一个想法 非常感谢您的帮助 代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import sy

我编写了一个简单的程序,可以用作Python的主题

标准的颜色是白色,标准的颜色是绿色,标准的颜色是红色

该程序运行良好,但我想做的是,当用户键入一个关键字(如“def”)时,该关键字的颜色应该像在Vim中键入“def”一样更改

我想用键盘记录器来捕捉键盘。但我仍然没有找到一个有用的方法来同步更改关键字的颜色

请看一下代码,给我一个想法

非常感谢您的帮助

代码:

#!/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),而不使用其他第三方库。
。顺便说一句,感谢您的原始代码给了我灵感。