pyw Skript macht Probleme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mampe71
User
Beiträge: 3
Registriert: Donnerstag 20. Februar 2014, 21:20

Ich hab einen einfachen Linkcrawler in Python geschrieben.
Liest per beautifulsoup spezielle Links einer Seite aus und blättert sich so durch die Seiten immer tiefer in eine Webseite.
Die Tiefe kann ich vorgeben. Die gefundenen Links werden in ein File geschrieben und per print ausgegeben.
Es funktioniert auch perfekt wenn ich das Programm als py-Extension File oder vom IDLE aus starte.
Hab mir jetzt aber gedacht einen Dialog in Tkinter dazu zu bauen. Funktioniert uahc wieder toll mit
Konsole oder aus dem IDLE (Editor) heraus gestaret.
Wenn man das Programm aber als pyw (ohen Konsole) startet hört es einfach auf ins Fiel zu schrieben
( immer ca. nach 5kB oder ca. 250 Zeilen).
Hat das irgendwas mit einem Konsolenbuffer zu tun? oder osllt eich einfach das print rausgeben (ins File schreibe ich ja mit file.write).

Mir geht es einfach darum zu wissen was da basiert. Ich hab das print rausgegeben und es geht soweit ich überprüfen kann auch recht gut.
Aber Erklärung habe ich bisher keine gefunden.
BlackJack

@mampe71: Das könnte ein Dateipuffer sein der vollläuft, also die Vermutung mit dem ``print`` ist naheliegend.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Ist die Datei während der gesamten Webseite geöffnet oder wird für jeden neuen Link die Datei geöffnet und geschlossen?
Werden kontinuierlich neue Zeilen geschrieben oder alle nach Abschluss der Aufgabe?

Was meinst du mit "print" rausgeben? Das du es aus dem Skript entfernt hast oder zur Ausgabe eingefügt?
mampe71
User
Beiträge: 3
Registriert: Donnerstag 20. Februar 2014, 21:20

Ich schreibe im Programm sowohl ins File als auch auf die console.
Wenn ich das Programm ohne Console starte (pyw) hört es irgendwann nach
einer Zeit auf ins File zu schreiben. Wenn es mit COnsole (py) gestartet wird funktioniert es.
Das print schreibt den gefundenen Link in die COnsole - das f.write ins File.
Wenn ich das print auskommentiere funktioniert das Programm wie es soll
auch ohne Console.

Code: Alles auswählen

                        print dtag['href']
                        f.write(dtag['href'])
                        f.write('\r\n')
    f.close()
    master.destroy()
Wie macht man ein logging dann sinnvoll in Python - Console wäre schon nett.
Oder kann man irgendwie abfrage ob eine COnsole offen ist und das print nur rauschreiben, wenn
die Console da ist? Ich finde das Verhalten trotzdem komisch.
BlackJack

@mampe71: Logging macht man in Python mit dem `logging`-Modul. Und dann halt in eine Datei.
mampe71
User
Beiträge: 3
Registriert: Donnerstag 20. Februar 2014, 21:20

@BlackJack: Danke für die Info, hab mir das Logging Modul (Doku) angeschaut und das scheint wirklich sehr brauchbar aus.
Antworten