2017-06-21 1 views
1

Python insère une ligne vide dans la sortie de la console entre chaque appel de la fonction input() mais je ne le souhaite pas (je veux que les invites input() figurent sur des lignes contiguës dans la console au lieu d'être séparées par une ligne vide). Y-a-t-il un moyen de faire ça? J'ai essayé d'utiliser input("foo", end="") pensant qu'il peut fonctionner comme la fonction print(), mais ce n'est pas le cas ...Comment puis-je empêcher Python d'insérer une nouvelle ligne après la saisie de l'utilisateur?

code:

fname = input("Please enter your first name: ") 
lname = input("Please enter your last name: ") 
print("Pleased to meet you, " + str(fname) + " " + str(lname) + "!") 

Sortie:

Please enter your first name: Jane 

Please enter your last name: Doe 
Pleased to meet you, Jane Doe! 

sortie souhaitée:

Please enter your first name: Jane 
Please enter your last name: Doe 
Pleased to meet you, Jane Doe! 

Editer:

Comme d'autres l'ont souligné dans la section des commentaires, ce problème est non reproductible, même pour moi, sauf à travers l'utilisation de l'interface IPython dans l'EDI Spyder. Si quelqu'un exécute IPython en dehors de Spyder, veuillez exécuter le code ci-dessus et faites-moi savoir si cela produit la même sortie. Je peux reproduire la sortie indésirable via l'interface IPython de Spyder, mais pas via une session Terminal Server, donc c'est quelque chose de spécifique à IPython ou Spyder.

+4

Je ne reçois pas le comportement que vous décrivez. Votre code fonctionne pour moi. –

+0

En effet, ne peut pas reproduire! –

+1

Avez-vous frappé deux fois? –

Répondre

0

(Spyder développeur ici) Cela ressemble à un bug mineur dans notre console IPython. S'il vous plaît le signaler ici:

https://github.com/jupyter/qtconsole

Remarque: Cette console n'intégrez simplement une session IPython de terminal Spyder (c'est pourquoi faire des comparaisons à ce faire du tout aucun sens). Au lieu de cela, il s'agit d'une ré-implémentation de la plupart du comportement du terminal, mais en utilisant une boîte à outils graphique (appelée Qt) et l'architecture noyau/frontend de Jupyter.

+0

Je vois; Merci pour votre réponse! Je signalerai le problème au lien suggéré dans quelques minutes. – paanvaannd

0

Peut-être pas exactement ce que vous cherchez, mais cela devrait résoudre votre problème.

Supprimer ligne précédente console avec:

def delete_previous_line(): 
    CURSOR_UP_ONE = '\x1b[1A' 
    ERASE_LINE = '\x1b[2K' 
    print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE) 


fname = input("Please enter your first name: ") 
delete_previous_line() 
lname = input("Please enter your last name: ") 
print("Pleased to meet you, " + str(fname) + " " + str(lname) + "!") 

Voir remote last STDOUT.

Si cela ne fonctionne pas essayer

print(CURSOR_UP_ONE + ERASE_LINE) 

au lieu de

print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE) 
+0

Les deux itérations d'appel de fonction suggérées (celles avec et sans la dernière CURSOR_UP_ONE) ajoutent réellement _another_ une ligne vide entre les invites d'entrée dans IPython pour moi. En cours d'exécution de Terminal, j'obtiens les lignes d'invite d'entrée étant supprimées elles-mêmes en utilisant l'itération suggérée initiale de la fonction (ce qui est net ... Je pourrais l'utiliser dans d'autres programmes pour nettoyer la sortie). Il semble que IPython gère 'input()', donc je vais garder cela ouvert un peu plus longtemps pour confirmer. Merci pour l'info supplémentaire, cependant! : +) – paanvaannd

-1

Aucune ligne vide supplémentaire dans la console Windows Vista.

Des lignes vides supplémentaires sont insérées dans Spyder lorsque "Exécuter dans la console actuelle" est sélectionné.

Ces lignes supplémentaires ne sont PAS insérées si le programme est exécuté dans une "console dédiée". (Python 3.6, Spyder 3.2.3, IPython 5.3.0)

Spyder -> Exécuter -> Configuration par fichier ...-> Exécuter dans la console dédiée

(16/10/2017, 32 bits Anaconda sur MS Windows Vista 32 bits.)