4
votes

Comment définir un préfixe pour toutes les sorties print () en python?

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?


0 commentaires

3 Réponses :


1
votes

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)


0 commentaires

5
votes

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)


0 commentaires

0
votes

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.


0 commentaires