Je veux savoir s'il existe un moyen de vérifier si mon programme peut produire une sortie de terminal en utilisant des couleurs ou non.
Exécuter des commandes comme less
et en regardant la sortie d'un programme qui sort en utilisant des couleurs, la sortie est mal affichée, comme
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
Merci
Réponse acceptée :
L'idée est que mon application sache ne pas colorer la sortie si le programme ne peut pas imprimer, par exemple, enregistrer la sortie via une tâche cron dans un fichier, pas besoin d'enregistrer la sortie colorée, mais lors de l'exécution manuelle, j'aime voir la sortie colorée
Dans quelle langue rédigez-vous votre candidature ?
L'approche normale consiste à vérifier si le périphérique de sortie est un tty et, si c'est le cas, à vérifier si ce type de terminal prend en charge les couleurs.
Dans bash
, cela ressemblerait à
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
En C, vous devez taper beaucoup plus, mais vous pouvez obtenir le même résultat en utilisant isatty et les fonctions répertoriées dans man 3 terminfo
.