Sorunun cevabı: Stderr'i python'da yazdırmanın farklı bir yolu vardır, ancak bu 1.) hangi python sürümünü kullandığımızı 2.) tam olarak istediğimiz çıktı.
Yazdırma ve stderr'in yazma işlevi arasındaki fark:
stderr : stderr (standart hata), programınız çöktüğünde ve hata ayıklama bilgilerini yazdırdığında (Python'daki bir izleme gibi), her UNIX / Linux sistemine yerleşik bir borudur. boru.
print : print, girdileri biçimlendiren bir sarıcıdır (girdi, argüman ile sondaki satırsonu arasındaki boşluktur) ve daha sonra belirli bir nesnenin yazma işlevini çağırır, varsayılan olarak verilen nesne sys.stdout'dur, ancak bir dosyayı iletmek yani girişi bir dosyaya da yazdırabiliriz.
Python2: Eğer python2 kullanıyorsanız
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Python2 sondaki virgül Python3'te bir parametre haline gelir, bu nedenle bir baskıdan sonra yeni satırdan kaçınmak için sondaki virgül kullanırsak, bu Python3'te Python2 altında bir sözdizimi hatası olan yazdırma ('yazdırılacak metin', end = '') gibi görünür. .
http://python3porting.com/noconv.html
Python3'teki yukarıdaki sceario'yu kontrol edersek:
>>> import sys
>>> print("hi")
hi
Python 2.6 altında , bir işleve baskı yapmak için gelecekteki bir içe aktarma vardır . Bu nedenle, sözdizimi hatalarını ve diğer farklılıkları önlemek için, print () işlevini kullandığımız herhangi bir dosyayı ileride import print_function ile başlatmamız gerekir . Gelecekteki ithalat sadece Python 2.6 altında çalışır ve daha sonra, bu yüzden Python 2.5 için ve önceki iki seçeneğiniz vardır. Daha karmaşık baskıyı daha basit bir şeye dönüştürebilir veya hem Python2 hem de Python3 altında çalışan ayrı bir yazdırma işlevi kullanabilirsiniz.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
Durum: Dikkat edilmesi gereken nokta, sys.stderr.write () veya sys.stdout.write () (stdout (standart çıktı), her UNIX / Linux sistemine yerleşik bir borudır) yazdırma yerine geçmez, ancak evet bazı durumlarda alternatif olarak kullanabiliriz. Yazdır, girdiyi sonunda boşluk ve satırsonu ile saran ve yazmak için yazma işlevini kullanan bir sarıcıdır. Sys.stderr.write () yönteminin daha hızlı olmasının nedeni budur.
Not: Günlük Kaydı kullanarak da izleyebilir ve hata ayıklayabiliriz
#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)
https://docs.python.org/2/library/logging.html#logger-objects