J'imprime sur une console en python. Je recherche un morceau de code unique pour que toutes les déclarations imprimées après une ligne de code aient 4 espaces au début. Ex. les fonctions de sortie sont tabulées. Est-ce possible?
3 Réponses :
Pourquoi ne pas définir votre propre fonction personnalisée et l'utiliser si nécessaire:
Computer: Hello world
receiving...
received!
World: Hi!
Elle serait utilisée comme ceci:
print('Computer: Hello world')
tprint('receiving...')
tprint('received!')
print('World: Hi!')
Sortie :
def tprint(*args):
print(' ', *args)
Vous pouvez définir une fonction print qui imprime d'abord votre préfixe, puis appelle en interne la fonction print intégrée. Vous pouvez même créer votre fonction personnalisée print () pour regarder la pile d'appels et déterminer en conséquence le nombre d'espaces à utiliser comme préfixe:
del print
Testez-le:
Printing from func_f
Printing from func_g
Sortie:
def func_f():
print("Printing from func_f")
func_g()
def func_g():
print ("Printing from func_g")
func_f()
Revenir à la fonction intégrée print () :
Lorsque vous avez terminé votre impression personnalisée, et souhaitez commencer à utiliser la fonction intégrée print () , utilisez simplement del pour "supprimer" votre propre définition de l'impression:
import builtins
import traceback
def print(*objs, **kwargs):
my_prefix = len(traceback.format_stack())*" "
builtins.print(my_prefix, *objs, **kwargs)
Vous voudrez peut-être utiliser des préfixes spécifiques uniquement à des endroits spécifiques
import sys
from contextlib import contextmanager
@contextmanager
def add_prefix(prefix):
global is_new_line
orig_write = sys.stdout.write
is_new_line = True
def new_write(*args, **kwargs):
global is_new_line
if args[0] == "\n":
is_new_line = True
elif is_new_line:
orig_write("[" + str(prefix) + "]: ")
is_new_line = False
orig_write(*args, **kwargs)
sys.stdout.write = new_write
yield
sys.stdout.write = orig_write
with add_prefix("Computer 1"):
print("Do something", "cool")
print("Do more stuffs")
with add_prefix("Computer 2"):
print("Do further stuffs")
print("Done")
#[Computer 1]: Do something cool
#[Computer 1]: Do more stuffs
#[Computer 2]: Do further stuffs
#Done
L'avantage est que c'est une fonction utilitaire, c'est-à-dire qu'il suffit d'importer pour l'utiliser, sans avoir à redéfinir à chaque fois vous écrivez un nouveau script.