私は、ファイルに出力して書き込むプログラムを持っています。ロガーを使用しているどのようにこれを使用ユニコードが私のファイルに書き込まれています
def set_color(org_string, level=None):
"""
set the console log color, this will kinda mess with the file log but whatever
"""
color_levels = {
10: "\033[36m{}\033[0m", # DEBUG
20: "\033[32m{}\033[0m", # INFO *default
30: "\033[33m{}\033[0m", # WARNING
40: "\033[31m{}\033[0m", # ERROR
50: "\033[7;31;31m{}\033[0m" # FATAL/CRITICAL/EXCEPTION
}
if level is None:
return color_levels[20].format(org_string)
else:
return color_levels[int(level)].format(org_string)
:
あなたは色を設定するには、ロガーを呼び出す# console logger and file logger settings
logger = logging.getLogger("zeus-log")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(
filename=create_log_name(), mode="a+"
)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
file_format = logging.Formatter(
'%(asctime)s;%(name)s;%(levelname)s;%(message)s'
)
console_format = logging.Formatter(
"[%(asctime)s %(levelname)s] %(message)s", "%H:%M:%S"
)
file_handler.setFormatter(file_format)
console_handler.setFormatter(console_format)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
:
logger.info(set_color(
"test"
))
出力は次のようになります機能を使用して着色されています
緑色のテキスト、または任意の色を出力します。問題は、それがログファイルに書き込むとき、それはまたset_color
機能情報を書きますで、出力は次のようになります。
2017-09-29 14:25:50,277;zeus-log;DEBUG;[36mchecking if the application has been run before...[0m
2017-09-29 14:25:50,278;zeus-log;DEBUG;[36mverifying operating system...[0m
2017-09-29 14:25:50,278;zeus-log;DEBUG;[36malready ran, skipping...[0m
2017-09-29 14:25:50,279;zeus-log;DEBUG;[36mrunning with options '{'runInVerbose': True, 'useRandomAgent': True, 'dorkToUse': 'inurl:php?id=10'}'...[0m
2017-09-29 14:25:50,280;zeus-log;INFO;[32mlog file being saved to '/home/baal/bin/python/zeus-scanner/log/zeus-log-47.log'...[0m
2017-09-29 14:25:50,280;zeus-log;DEBUG;[36mgrabbing random user-agent from '/home/baal/bin/python/zeus-scanner/etc/agents.txt'...[0m
2017-09-29 14:25:50,281;zeus-log;DEBUG;[36musing default search engine (Google)...[0m
2017-09-29 14:25:50,282;zeus-log;INFO;[32musing default search engine...[0m
2017-09-29 14:25:50,282;zeus-log;INFO;[32mstarting dork scan with query 'inurl:php?id=10'...[0m
2017-09-29 14:25:50,282;zeus-log;DEBUG;[36mchecking for user-agent and proxy configuration...[0m
2017-09-29 14:25:50,285;zeus-log;INFO;[32mattempting to gather query URL...[0m
私は、ログファイルに書き込むことができますし、Unicode文字列を取り除く方法がありますカラーコール(
[<NUM>m
)と一緒に?
SO
はここで、上記の出力から問題を取り除い明確にする
は、問題の画像は、次のとおりです。
あなたは奇妙な四角は、ANSIエスケープシーケンスの前にある見ることができるように
あなたはファイルにUnicodeを書き込むことはできません。バイトは書き込むことができます。 – wim
あなたはどんなUnicode文字列について話していますか?あなたの例のすべてがASCIIのように見えます。 –
これはUnicodeとは何が関係していますか?どちらの場合も同じバイトを書きます。違いは、端末が、表示可能な形式でバイトを表示するのではなく、「色を変える」ことを意味すると解釈することです。 – chepner