J'ai ce code simple dans lequel chaque itération écrase la sortie de la ligne précédente:
import time
for i in reversed(range (12)):
print i, '\r',
time.sleep(0.2)
lorsque j'exécute le script à l'aide de la commande: python test.py
je vois que la sortie se remplace à chaque itération comme prévu. Cependant, lorsque je redirige la sortie vers un fichier à l'aide de la commande:
python test.py >> tmp.txt
J'obtiens un fichier contenant les 12 numéros sur 12 lignes distinctes.
Comment puis-je obtenir le même résultat final dans le fichier de sortie que si j'exécutais le script à partir de la ligne de commande?
J'utilise python 2.6.5 sur Windows 10.
Vous ne pouvez pas faire cela car la redirection ajoute des données à la fin du fichier.
Ce qui est écrit est écrit.
Edit: MAIS il existe des solutions de contournement.
import time,sys
interactive = sys.stdout.isatty()
for i in reversed(range (12)):
if i==0 or interactive:
print i, '\r',
time.sleep(0.2)
Lorsqu'il est redirigé vers un fichier, il s'imprime uniquement 0
. S'il est exécuté sans redirection, il fonctionnera comme avant.
Si vous exécutez Linux ou Windows avec MSYS installé, dirigez simplement la sortie vers une commande telle que cat
python test.py | cat >> tmp.txt
seul 0
sera renvoyé au fichier
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots