打印包含 python 颜色的环境变量
Print environment variables containing color from python
我有一个包含颜色 table 的文件,它设置了我用于 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
您的 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 进程,稍后从 shell 使用 [=17= 调用时].
zsh
中的另一个选项是使用 setopt allexport
并将所有环境变量导出到子进程 (subshell),但这可能会产生许多不良影响,因此您个人 export
更安全。
修改 appearance
文件后,您必须在 Python 中调整颜色名称解析,可能像这样(仅限内部 if
):
if line and not line.startswith("#"):
color = line.split("=")[0].split()[1]
subprocess.call('echo "${%s}"text' % color, shell=True)
我有一个包含颜色 table 的文件,它设置了我用于 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
您的 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 进程,稍后从 shell 使用 [=17= 调用时].
zsh
中的另一个选项是使用 setopt allexport
并将所有环境变量导出到子进程 (subshell),但这可能会产生许多不良影响,因此您个人 export
更安全。
修改 appearance
文件后,您必须在 Python 中调整颜色名称解析,可能像这样(仅限内部 if
):
if line and not line.startswith("#"):
color = line.split("=")[0].split()[1]
subprocess.call('echo "${%s}"text' % color, shell=True)