2010-04-09 16 views
5

benim python komut dosyası ile ilgili bir sorun yaşıyorum.Sessizlik logger ve ekrana baskı - Python

Bu ekranda büyük miktarda veriyi baskı, ve ben ekrana baskı her türlü önlemek istiyoruz.


Düzenleme: kullanıyorum kütüphanesidir

motorize ve ekranda çok fazla veri yazdırma ediyor.

hiçbir şans ile false bu belirledik!

br.set_debug_redirects(False) 
br.set_debug_responses(False) 
br.set_debug_http(False) 

Herhangi bir fikir?

Yardım şaşırtıcı ve çok takdir olurdu! (Senin 2 Düzenlemenize dayanarak)

+1

biraz daha bilgi verebilir misiniz?Hangi senaryodan bahsediyorsun? Ne tür bir veri yazdırıyor? Bazı kodları gösterebilir misin? Harici komut kullanıyor musunuz? – Ikke

cevap

10

tüm çıktıyı devre dışı bırakmak istemiyorsanız, sen kendini mechanize özgü olacak şekilde deneyebilirsiniz. http://wwwsearch.sourceforge.net/mechanize/ (işe yarayacak eğer emin değilim gerçi) ben modifiye ettik pasajı sağlar:

import logging 
logger = logging.getLogger("mechanize") 
# only log really bad events 
logger.setLevel(logging.ERROR) 

bir şey yazdırmak zaman sys.stdout dosyası aracılığıyla ekrana gider. Tabii

import sys 
# save the old stdout so you can print later (do sys.stdout = OLD_STDOUT) 
OLD_STDOUT = sys.stdout 
sys.stdout = open("logfile.txt", 'w') 

Eğer aradığınız bazı kütüphanede bahsediyorsak,: hiçbir şey ekrana yazdırılır, böylece (örneğin açmak bir günlük dosyası) diğer herhangi bir dosyaya bu dosyayı değiştirebilir sys.stderr'a yazdırıyor olabilir. Neyse ki, (yukarıdan devam) Bunun için aynı şeyi yapabilirsiniz:

Şimdi, bazı nedenlerden dolayı, tamamen stdout'u (veya stderr'yi) görmezden tekrar yapabilirsiniz görmek asla istiyorsanız
OLD_STDERR = sys.stderr 
sys.stderr = open("errorLog.txt", 'w') 

basitçe nesneleri atmak o kendi dosya benzeri sınıflarını tanımlar:

# discards all input (change /dev/null to a file name to keep track of output) 
python yourScript.py > /dev/null 
+0

İNANILMAZ cevap için teşekkürler! Doğru/Yanlış yazım hatası – RadiantHex

2

Sen may: olası çözümlerin gürültüde eklemek,

class Discarder(object): 
    def write(self, text): 
     pass # do nothing 
# now discard everything coming out of stdout 
sys.stdout = Discarder() 

Ve burada Unix kabuklarda çalışan bir çözümdür yönlendirme sys.std dışarı ve sys.stderr bir dosyaya veya sizinki gibi herhangi bir dosyaya ör.

ancak bunu önermem, daha basit bir seçenek OS düzeyini yeniden yönlendirme kullanmaktır örn.

python myscript.py > out.log 
+1

için özür dilerim ve stderr'i de (bash) yönlendirmeniz gerekiyorsa, python myscript.py 2> & 1> out.log' – cobbal

0

bunun yerine kendi stdout'u akışı yuvarlanan de StringIO modülünü kullanabilirsiniz. Bazen, stdout'u StringIO idare edecek olan, (flush başka bir genel biridir), bir write yöntemi daha fazla gerekmektedir.

import StringIO 
import sys 

sys.stdout = StringIO.StringIO()