Je veux exécuter un script, qui affiche essentiellement une sortie comme celle-ci:
Installing XXX... [DONE]
Actuellement, j'imprime d' Installing XXX...
abord, puis j'imprime [DONE]
.
Cependant, je veux maintenant imprimer Installing xxx...
et [DONE]
sur la même ligne.
Des idées?
python
printing
stdout
line-breaks
user697108
la source
la source
Réponses:
Vous pouvez utiliser l'
print
instruction pour le faire sans importersys
.La virgule à la fin de la
print
ligne empêcheprint
d'émettre une nouvelle ligne (vous devez noter qu'il y aura un espace supplémentaire à la fin de la sortie).La solution Python 3
Étant donné que ce qui précède ne fonctionne pas dans Python 3, vous pouvez le faire à la place (encore une fois, sans importer
sys
):La fonction d'impression accepte un
end
paramètre par défaut"\n"
. Le définir sur une chaîne vide l'empêche d'émettre une nouvelle ligne à la fin de la ligne.la source
print("...", end="", flush=True)
en Python 3, en Python 2 ajoutez unsys.stdout.flush()
appel.print("Progress: {}%".format(var), end="\r", flush=True)
Vous pouvez simplement utiliser ceci:
et la sortie sera
pas besoin de surpasser par
import sys
. Faites attention au symbole de virgule à la fin.Python 3+
print("some string", end="");
pour supprimer l'insertion de nouvelle ligne à la fin. Lire la suite parhelp(print);
la source
print
La fonction a une syntaxe légèrement différente dans Python 2 VS 3.Vous devez utiliser le retour arrière ' \ r ' ou (' \ x08 ') pour revenir à la position précédente dans la sortie de la console
Python 2+:
Python 3:
Ce code comptera de 0% à 100% sur une seule ligne. La valeur finale sera:
Des informations supplémentaires sur flush dans ce cas ici: Pourquoi les instructions d'impression python qui contiennent des arguments 'end =' se comportent-elles différemment dans les boucles while?
la source
Utilisez
sys.stdout.write('Installing XXX... ')
etsys.stdout.write('Done')
. De cette façon, vous devez ajouter la nouvelle ligne à la main"\n"
si vous souhaitez recréer la fonctionnalité d'impression. Je pense qu'il pourrait être inutile d'utiliser des malédictions juste pour cela.la source
__future__
importations ou quelque chose comme ça.Aucune des réponses n'a fonctionné pour moi car elles se sont toutes arrêtées jusqu'à ce qu'une nouvelle ligne soit rencontrée. J'ai écrit une aide simple:
Pour le tester:
"bonjour" imprimera d'abord et affleurera à l'écran avant le sommeil. Après cela, vous pouvez utiliser l'impression standard.
la source
sys.stdout.write
imprimera sans retour chariothttp://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
la source
Le plus simple:
Python 3
Cela signifie qu'il ramènera le curseur au début, qu'il imprimera quelque chose et se terminera sur la même ligne. S'il est en boucle, l'impression commencera au même endroit qu'il commence.
la source
print(’something to be override’, end=‘\r’)
c'est plus simple, cependant.Cet exemple simple imprimera 1-10 sur la même ligne.
la source
Print a un
end
argument optionnel , c'est ce qui est imprimé à la fin. La valeur par défaut est une nouvelle ligne, mais vous pouvez la remplacer par une chaîne vide. par exempleprint("hello world!", end="")
la source
print 'something',
. La virgule à la fin empêche l'ajout d'une nouvelle ligne.Si vous souhaitez remplacer la ligne précédente (plutôt que d'y ajouter continuellement), vous pouvez combiner
\r
avecprint(),
à la fin de l'instruction d'impression. Par exemple,comptera de 0 à 9, remplaçant l'ancien numéro dans la console. Le
"...DONE!"
sera imprimé sur la même ligne que le dernier compteur, 9.Dans votre cas pour l'OP, cela permettrait à la console d'afficher le pourcentage d'achèvement de l'installation sous forme de "barre de progression", où vous pouvez définir une position de début et de fin de caractère et mettre à jour les marqueurs entre les deux.
la source
Voici une version compatible 2.7 dérivée de la version 3.0 de @ Vadim-Zin4uk:
Python 2
D'ailleurs, la solution 3.0 fournie semble un peu gonflée. Par exemple, la méthode de retour arrière n'utilise pas l'argument entier et pourrait probablement être complètement supprimée.
Python 3
Les deux ont été testés et fonctionnent.
la source
Il s'agit d'un fil très ancien, mais voici une réponse très complète et un exemple de code.
\r
est la représentation sous forme de chaîne du retour chariot à partir du jeu de caractères ASCII. C'est la même chose que octal015
[chr(0o15)
] ou hexidécimal0d
[chr(0x0d)
] ou décimal13
[chr(13)
]. Voirman ascii
pour une lecture ennuyeuse. C'est (\r
) une représentation assez portable et assez facile à lire pour les gens. Cela signifie très simplement de déplacer le chariot sur la machine à écrire jusqu'au début sans faire avancer le papier. C'est laCR
partieCRLF
qui signifie retour chariot et saut de ligne .print()
est une fonction en Python 3. En Python 2 (toute version que vous seriez intéressé à utiliser),print
peut être forcée dans une fonction en important sa définition depuis le__future__
module. L'avantage de laprint
fonction est que vous pouvez spécifier ce qu'il faut imprimer à la fin, en remplaçant le comportement par défaut de\n
pour imprimer une nouvelle ligne à la fin de chaqueprint()
appel.sys.stdout.flush
indique à Python de vider la sortie de la sortie standard , où vous envoyez la sortie,print()
sauf indication contraire. Vous pouvez également obtenir le même comportement en exécutant avecpython -u
ou en définissant la variable d'environnementPYTHONUNBUFFERED=1
, ignorant ainsi les appelsimport sys
etsys.stdout.flush()
. Le montant que vous gagnez en faisant cela est presque exactement nul et n'est pas très facile à déboguer si vous oubliez commodément que vous devez effectuer cette étape avant que votre application se comporte correctement.Et un échantillon. Notez que cela fonctionne parfaitement en Python 2 ou 3.
la source
print () a un paramètre intégré "end" qui est par défaut défini sur "\ n" L'appel à print ("This is America") appelle en fait print ("This is America", end = "\ n"). Un moyen simple consiste à appeler print ("This is America", end = "")
la source
Juste au cas où vous auriez pré-stocké les valeurs dans un tableau, vous pouvez les appeler au format suivant:
la source
Python ajoute la nouvelle ligne comme fin à l'impression. Utilisez end = '' pour python3 pour la méthode d'impression pour ajouter un espace au lieu d'une nouvelle ligne. pour python2, utilisez une virgule à la fin de l'instruction print.
la source
J'ai trouvé ce post Quora , avec cet exemple qui a fonctionné pour moi (python 3), qui était plus proche de ce dont j'avais besoin (c'est-à-dire en effaçant toute la ligne précédente).
L'exemple qu'ils fournissent:
Pour imprimer le sur la même ligne, comme d'autres l'ont suggéré, utilisez simplement
end=""
la source
J'ai trouvé cette solution, et cela fonctionne sur Python 2.7
la source
print
une syntaxe incorrecte pour Python 2.7 et le code ne fonctionne pas même avec une syntaxe correcte.