2016-05-03 10 views
1

Wenn ich einen Wagenrücklauf im Leerlauf verwende, scheint nichts zu passieren.Wagenrücklauf in Python 3.4 bewegt sich nicht nach links

>>>print('2\r3') 
23 
>>> carriage_return = "I will use a carriage\rreturn" 
>>> print(carriage_return) 
I will use a carriagereturn 

Wenn ich die gleichen Zeilen über die Befehlszeile ausführen, funktioniert es einwandfrei.

Ist das ein Leerlauffehler (und wenn ja, gibt es eine Arbeit) oder fehlt mir etwas Einfaches? Mein Betriebssystem ist Windows 7.

+0

Keine Antwort, aber ich fand ein ähnliches E-Mail-Archiv: https://mail.python.org/pipermail/tutor/2006-February/045277.html. Das heißt, die Verwendung von Wagenrücklauf ist sehr ungewöhnlich. Die Tatsache, dass es Teil der Standarddarstellung von Windows in einer neuen Zeile ist und eine alte Mac-Darstellung einer neuen Zeile ist, liegt wahrscheinlich an der Spitze der Gründe, warum es ungewöhnlich ist. Ich würde sicherlich nicht erwarten, dass es systemübergreifend übertragbar ist. (Oder sogar über Displays, wie Sie entdeckt haben. Wie funktioniert es zum Beispiel mit PuTTY für SSH?) Was wollen Sie erreichen? – jpmc26

+0

Danke für den Link, das war die Antwort, die ich suchte. Ich versuche nicht, irgendetwas zu erreichen, nur durch die O'Reilly-Serie zu arbeiten. Ich habe festgestellt, dass wenn ich weitergehe ohne etwas zu verstehen, es mich später beißt. – KEJ

Antwort

0

Auf Windows müssen Sie eine "neue Linie" tun \n, bevor Sie einen "Wagenrücklauf" do \r

Beispiel:

>>>car = "carriage\n\rreturn" 
>>>print (car) 
carriage 
return 
>>> 

[EDIT basierend auf Kommentare

]

wenn das Ziel über die vorherige Zeile zu drucken ist, kann folgende auf Microsoft Windows

import sys 

def print_and_return(string): 
    #adding '\b' which moves the carriage back one character 
    #based on length of the string 
    sys.stdout.write(string.ljust(len(string)*2,'\b')) 
    sys.stdout.flush() 

#this will print to stdout, and 'return' position to start 
print_and_return("string1") 

#normal print, but starting at the start of the previous print 
print("string2") 
012 verwendet werden,

Dies wird

string2 

produzieren und wird die ursprüngliche Zeichenfolge überschrieben haben, können Sie eine time.sleep() zwischen den beiden Aussagen stellen können, wenn Sie es erleben möchten.

Dies wird jedoch über die erste Zeile in der ursprünglichen Zeile gedruckt, aber die vorherige gedruckte Zeichenfolge wird nicht gelöscht. Wenn also die zweite Zeichenfolge kürzer als die ursprünglich gedruckte Zeichenfolge ist, bleibt das Ende der ursprünglich gedruckten Zeichenfolge erhalten Bildschirm.

print_and_return("string1=long") 
print("string2") 

wird

string2=long 

Sie können die Länge des vorherigen Zeichenfolge immer produzieren zurück, dann Räume bis zum Ende des zweiten Strings hinzufügen, die dann die zusätzlichen Zeichen mit Leerzeichen überschrieben.

import sys 

def print_and_return(string): 
    sys.stdout.write(string.ljust(len(string)*2,"\b")) 
    sys.stdout.flush() 
    return len(string) 

l = print_and_return("string1=long") 

#normal print, but starting at the start of the previous print 
#adding spaces to ensure the length is the same as previous printed string 
print("string2".ljust(l)) 

wird dies jetzt produzieren:

string2 

HTH.

+0

Ziel ist es, an den Anfang der * selben * Zeile zurückzukehren und die vorhandenen Zeichen zu überschreiben. Deine Antwort wird es nicht tun; es wird den Inhalt auf eine neue Zeile setzen. – jpmc26

+0

@ jpmc26, ich habe meine Antwort mit Code zum Überschreiben bearbeitet –