2017-07-15 4 views
0

私はzshプロンプトに使用する環境変数を設定するカラーテーブルを含むファイルを持っています。現在、#color-beginと#color-endの間にあるすべての色をとるpythonスクリプトがあります。しかし、私はpythonの文字列変数をPythonのシェル呼び出しに渡すことはできません。問題の内容は不明です。pythonの色を含む環境変数を出力します

pythonStr = "fg_blue" 
pythonStr = "$"+fg_blue 
os.system("echo + pythonStr") 

よう

何かがこれまでのところ私は.SHファイルに変数を渡すいくつかの例を発見したが、どのよう.SHファイルなしで1枚のプリントアウト環境の色変数のでしょうか?これが不可能な場合、なぜこの場合ですか? ここに私が持っている現在のPythonコードと私が印刷したい色コードがあります。

ご協力いただければ幸いです。色

#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 
+0

だけで印刷を()を使用し、os.systemません:あなたはあなたのappearanceファイルを変更した後

、あなたはこれが(インナーifのみ)おそらくのように、Pythonでの解析色の名前を微調整する必要がありますecho ..) – hek2mgl

+0

私はpythonスニペットの最後の行にある "print(head)"をコメントアウトしました。 – Zypps987

+0

私は参照してください。 'os.system( '/ bin/bash -c" echo -e' + tail + '"')'を使ってください。 – hek2mgl

答えて

1

ため

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)                          

環境変数は、あなたのPythonプログラムにはいくつかのマイナーな問題がありますが、彼らはているので、あなたの変数が展開されていない主な理由は、 Pythonプログラムが実行されるとき、環境には存在しません。

あなたappearanceファイルは次のようになります。

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

%{..%}は単なる不要ですが、exportは非常に重要です。 exportがなければ、シェル内のsource appearanceの後に、後でpython printcolor.pyでそのシェルから呼び出されたときに、それらの変数はPythonプロセスに渡されません。 zsh

別のオプションはsetopt allexportを使用して、サブプロセス(サブシェル)に、すべての環境変数をエクスポートするだろうが、それは多くの望ましくない影響を持つことができるので、あなたは、個々のexport sの方が安全です。 (

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

説明をありがとう!それは今働いている。 – Zypps987

+0

あなたが大歓迎です、うれしいです。 – randomir

関連する問題