打印包含python颜色的环境变量

时间:2017-07-15 03:36:25

标签: python python-3.x shell zsh color-codes

我有一个包含颜色表的文件,该颜色表设置我用于zsh提示的环境变量。目前有一个python脚本,它采用#color-begin和#color-end之间的所有颜色。但是,我无法将python字符串变量传递给python shell调用,我不确定问题是什么。

这样的东西
pythonStr = "fg_blue"
pythonStr = "$"+fg_blue
os.system("echo + pythonStr")

到目前为止,我已经找到了几个将变量传递到.sh文件的示例,但是如何在没有.sh文件的情况下打印出环境颜色变量?如果这不可能,为什么会这样呢? 这是我当前的python代码和我想要打印的颜色代码。

非常感谢任何帮助。

printcolor.py

import os
import subprocess

def prcl():

with open("appearance") as f:
    content = f.readlines()

    foo = False

    for line in content:
        line = line.strip(' \n\t')

        # Toggle boolean                                                                                                          
        if "color-" in line:
            foo = not foo

        if foo == True:
            if line is not "" and "#" not in line:
                # Use '=' as a delimiter  
                head, sep, tail = line.partition("=")
                head='"$'+head+'"'

                # prints out blank lines
                os.system("echo "+head)

                #prints literal string
                #print(head)                                                                                                      

颜色的环境变量

#color-begin

fg_black=%{$'\e[0;30m'%}
fg_red=%{$'\e[0;31m'%}
fg_green=%{$'\e[0;32m'%}
fg_brown=%{$'\e[0;33m'%}
fg_blue=%{$'\e[0;34m'%}
fg_purple=%{$'\e[0;35m'%}
fg_cyan=%{$'\e[0;36m'%}
fg_lgray=%{$'\e[0;37m'%}
fg_dgray=%{$'\e[1;30m'%}
fg_lred=%{$'\e[1;31m'%}
fg_lgreen=%{$'\e[1;32m'%}
fg_yellow=%{$'\e[1;33m'%}
fg_lblue=%{$'\e[1;34m'%}
fg_pink=%{$'\e[1;35m'%}
fg_lcyan=%{$'\e[1;36m'%}
fg_white=%{$'\e[1;37m'%}
fg_blue=%{$'\e[0;34m'%}
fg_purple=%{$'\e[0;35m'%}
fg_cyan=%{$'\e[0;36m'%}
fg_lgray=%{$'\e[0;37m'%}
fg_dgray=%{$'\e[1;30m'%}
fg_lred=%{$'\e[1;31m'%}
fg_lgreen=%{$'\e[1;32m'%}
fg_yellow=%{$'\e[1;33m'%}
fg_lblue=%{$'\e[1;34m'%}
fg_pink=%{$'\e[1;35m'%}
fg_lcyan=%{$'\e[1;36m'%}
fg_white=%{$'\e[1;37m'%}

#Text Background Colors                                                                                                                                                                                                                                                           
bg_red=%{$'\e[0;41m'%}
bg_green=%{$'\e[0;42m'%}
bg_brown=%{$'\e[0;43m'%}
bg_blue=%{$'\e[0;44m'%}
bg_purple=%{$'\e[0;45m'%}
bg_cyan=%{$'\e[0;46m'%}
bg_gray=%{$'\e[0;47m'%}

#Attributes                                                                                                                                                                                                                                                                       
at_normal=%{$'\e[0m'%}
at_bold=%{$'\e[1m'%}
at_italics=%{$'\e[3m'%}
at_underl=%{$'\e[4m'%}
at_blink=%{$'\e[5m'%}
at_outline=%{$'\e[6m'%}
at_reverse=%{$'\e[7m'%}
at_nondisp=%{$'\e[8m'%}
at_strike=%{$'\e[9m'%}
at_boldoff=%{$'\e[22m'%}
at_italicsoff=%{$'\e[23m'%}
at_underloff=%{$'\e[24m'%}
at_blinkoff=%{$'\e[25m'%}
at_reverseoff=%{$'\e[27m'%}
at_strikeoff=%{$'\e[29m'%}

#color-end

1 个答案:

答案 0 :(得分:1)

您的Python程序存在一些小问题,但是未扩展变量的主要原因是因为在运行Python程序时 在环境中不存在

您的appearance文件应如下所示:

export fg_black=$'\e[0;30m'
export fg_red=$'\e[0;31m'
export fg_green=$'\e[0;32m'

%{..%}只是不必要的,但export至关重要。如果没有export,在shell中source appearance之后,当稍后从具有python printcolor.py的shell调用时,这些变量不会传递到python进程。

zsh中的另一个选项是使用setopt allexport并将所有环境变量导出到子流程(子shell),但这会产生许多不良影响,因此您可以更加安全地使用export {1}}秒。

修改appearance文件后,您必须在Python中调整颜色名称解析,可能就像这样(仅限内部if):

if line and not line.startswith("#"):
    color = line.split("=")[0].split()[1]
    subprocess.call('echo "${%s}"text' % color, shell=True)