J'ai un programme qui écrit en sortie et écrit dans un fichier. La sortie est colorée en utilisant une fonction qui ressemble à ceci:Unicode est en cours d'écriture dans mes fichiers
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)
Comment vous utilisez est d'utiliser un enregistreur:
# 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)
Lorsque vous appelez l'enregistreur, pour définir la couleur:
logger.info(set_color(
"test"
))
Permet de sortir du texte vert ou de la couleur de votre choix. Le problème est quand il écrit dans le fichier journal, il rédigera également les informations de fonction set_color
et la sortie ressemble à ceci:
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
Est-il possible que je peux écrire dans le fichier journal et de se débarrasser des chaînes unicode avec les appels de couleur ([<NUM>m
)?
Pour clarifier SO
retiré la question de la sortie ci-dessus, voici une image du problème:
Comme vous pouvez le voir, il y a des places étranges devant des séquences d'échappement ANSI
Vous ne pouvez pas écrire unicode aux fichiers. Vous ne pouvez écrire que des octets. – wim
De quelles chaînes Unicode parlez-vous? Tout dans votre exemple semble être ASCII. –
Qu'est-ce que cela a à voir avec Unicode? Vous écrivez les mêmes octets dans les deux cas; la différence est que le terminal les interprète comme signifiant «changer la couleur» au lieu d'afficher les octets sous une forme visible. – chepner