Seite 1 von 1

PythonWin: verzögerte Ausgabe

Verfasst: Dienstag 28. März 2006, 12:05
von N317V
Hallo liebe Gemeinde! ;-)

Ich arbeite hier (leider) auf Windows XP und benutze die IDE von PythonWin. Auf meiner Festplatte befinden sich eine Reihe an Dateien, die ich gerne archivieren möchte, die aber alle identisch benannt sind. Denk ich also: kein Problem, schreibst ein kleines Script, das die Dateien alle raussucht und eine laufende Nummer in den Dateinamen einfügt. Sieht dann so aus (noch ohne umbenennen, nur Anzeige):

Code: Alles auswählen

import os

def renAll(filename, startdir = '.'):
    print
    print "suche " + filename
    w = os.walk(startdir)
    counter = 0
    while True:
        try:
            x = w.next()
            if filename in x[2]:
                counter += 1
                renameArgument1 = os.path.join(x[0], filename)
                renameArgument2 = os.path.join(x[0], '%d_%s' % (counter, filename))
                print renameArgument1
                print renameArgument2
        except: 		
            print 'found %d files. found no more.' % (counter,)
            return 

if __name__ == '__main__':
    renAll('Dateiname.xyz', 'C:\\')
Nun ist mir aber aufgefallen, dass die Ausgabe von Zeile 16 erst kommt, wenn die nächste print-Anweisung kommt, sprich: das Script entweder wieder in Zeile 15 landet oder bei Zeile 18 ankommt. Hat PythonWin irgendeinen Output-Buffer von dem ich wissen sollte? Irgendwer Ahnung? Ist sicherlich kein schwerwiegendes Problem, aber ich fühl mich dabei irgendwie unwohl. :?

TIA

Verfasst: Dienstag 28. März 2006, 12:07
von modelnine
Hat PythonWin irgendeinen Output-Buffer von dem ich wissen sollte?
Ersteres: ja. Zweiteres: weiß ich nicht, dass mußt Du mit Dir selbst ausmachen. ;-)

Kannst mal probieren ob

Code: Alles auswählen

sys.stdout.flush()
hinter dem zweiten print was bringt.

Verfasst: Dienstag 28. März 2006, 12:39
von jens
Mein Tipp: Schmeiß die IDE weg und nimm SciTE ;)

Zum testen, kannst du das Skript aber auch mal nackig auf der Konsole laufen lassen!

Verfasst: Dienstag 28. März 2006, 14:07
von N317V
@modelnine: Danke schön! Woher weißt Du, dass es diesen Puffer gibt?
jens hat geschrieben:Mein Tipp: Schmeiß die IDE weg und nimm SciTE ;)
Ich wüsste jetzt nicht warum ich das tun sollte. Die IDE basiert ebenso auf Scintilla und die zusätzlichen Funktionen sind richtig gut. Vor allem für Windows-Programmierung.

Verfasst: Dienstag 28. März 2006, 15:11
von modelnine
Bei interaktiven Systemen (sprich eine IDE, die eine Konsole emuliert) ist das fast immer so, dass sie gepuffert sind, denn das unterliegende pty-artige Ding ist auch im Normalfall gepuffert (unter Windows, und auch unter Unix), teilweise Zeilenweise, teilweise Blockweise, kommt immer auf das System an. Das ganze ist an, außer das Programm was ausgeführt ist oder aber das Terminal selbst (also das Programm was das ganze anzeigt) stellen das explizit aus.

Es hätte mich also gewundert wenn PythonWin anders gewesen wäre...

Unabhängig davon: wenn sowas passiert, mach einfach ein sys.stdout.flush(), und guck was passiert. Wenn's dann geht hast Du ein Pufferungsproblem. Wenn's danach nicht geht, ists auch egal, der Befehl kann nichts kaputt machen.