2017-06-21 4 views
1

Python fügt eine Leerzeile in der Konsolenausgabe zwischen jedem Aufruf der input()-Funktion, aber ich möchte das nicht (d. H. Ich möchte die input() Eingabeaufforderungen auf zusammenhängende Zeilen in der Konsole statt durch eine leere Zeile getrennt). Gibt es eine Möglichkeit, das zu tun? Ich habe versucht, mit input("foo", end="") dachte, es wie die print() Funktion arbeiten kann, aber das ist nicht der Fall ...Wie kann ich verhindern, dass Python nach der Benutzereingabe eine neue Zeile einfügt?

Code:

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

Ausgang:

Please enter your first name: Jane 

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

gewünschte Ausgabe:

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

Bearbeiten:

Wie andere im Abschnitt Kommentare erwähnt haben, ist dieses Problem nicht reproduzierbar, außer für die Verwendung der IPython-Schnittstelle in der Spyder-IDE. Wenn jemand IPython außerhalb von Spyder ausführt, führen Sie bitte den obigen Code aus und lassen Sie mich wissen, ob das die gleiche Ausgabe erzeugt. Ich kann die unerwünschte Ausgabe über die Spyder IPython-Schnittstelle reproduzieren, aber nicht über eine Terminal-Sitzung, so dass dies entweder für IPython oder Spyder spezifisch ist.

+4

Ich bin nicht das Verhalten bekommen Sie beschreiben -. Dein Code funktioniert für mich. –

+0

In der Tat, kann nicht reproduzieren! –

+1

Hast du zweimal Enter gedrückt? –

Antwort

0

(Spyder Entwickler hier) Dies sieht aus wie ein kleiner Fehler in unserer IPython Konsole. Bitte melden Sie es hier:

https://github.com/jupyter/qtconsole

Hinweis: Diese Konsole ist einfach nicht ein Terminal IPython Sitzung in Spyder Einbetten (das ist, warum überhaupt Vergleiche es keinen Sinn machen).

Stattdessen ist es eine Re-Implementation der meisten Terminal-Verhalten, aber mit einem grafischen Toolkit (genannt Qt) und der Jupyter Kernel/Frontend-Architektur.

+0

Ich sehe; Danke für die Antwort! Ich werde das Problem in einigen Minuten unter dem vorgeschlagenen Link melden. – paanvaannd

0

Vielleicht nicht genau das, was Sie wollen, aber es sollte Ihr Problem lösen.

Löschen vorhergehende Zeile in der Konsole mit:

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) + "!") 

Siehe remote last STDOUT.

Wenn es nicht versuchen, funktioniert

print(CURSOR_UP_ONE + ERASE_LINE) 

statt

print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE) 
+0

Beide vorgeschlagenen Funktionsaufruf-Iterationen (die mit und ohne den letzten CURSOR_UP_ONE) fügen tatsächlich eine _eineweitere Leerzeile zwischen den Eingabeaufforderungen in IPython für mich hinzu. Wenn ich vom Terminal aus laufe, bekomme ich die Eingabeaufforderungszeilen selbst gelöscht, indem ich die anfängliche vorgeschlagene Iteration der Funktion verwende (was ordentlich ist ... ich könnte das in einigen weiteren Programmen verwenden, um die Ausgabe zu bereinigen). Es scheint eine Möglichkeit zu sein, dass IPython 'input()' behandelt, also werde ich das noch ein wenig länger offen halten, nur um es zu bestätigen. Danke für die zusätzlichen Informationen! : +) – paanvaannd

-1

Keine zusätzlichen leeren Zeilen in der Windows Vista-Konsole.

Zusätzliche leere Zeilen werden in Spyder eingefügt, wenn "in aktueller Konsole ausführen" ausgewählt ist.

Diese zusätzlichen Zeilen werden NICHT eingefügt, wenn das Programm in "dedicated console" ausgeführt wird. (Python 3.6, Spyder 3.2.3, IPython 5.3.0)

Spyder -> Ausführen -> Konfiguration pro Datei ...Ausführen> in dedizierte Konsole

(2017.10.16, 32-Bit-Anaconda auf MS Windows Vista 32 Bit.)

Verwandte Themen