질문에 대한 대답은 : 파이썬에서 stderr를 인쇄하는 다른 방법이 있지만 1) 우리가 사용하는 Python 버전 2.) 우리가 원하는 정확한 출력에 따라 다릅니다.
print와 stderr의 쓰기 기능의 차이점 :
stderr : stderr (표준 오류)는 모든 UNIX / Linux 시스템에 내장 된 파이프로, 프로그램이 충돌하고 디버깅 정보 (Python의 역 추적과 같은)를 인쇄 할 때 stderr로 이동합니다. 파이프.
인쇄 : print는 입력을 형식화하는 래퍼 (입력은 인수와 끝의 줄 바꿈 사이의 공간 임)이며 주어진 객체의 write 함수를 호출합니다. 주어진 객체는 기본적으로 sys.stdout입니다. 파일을 전달하십시오. 즉 파일에 입력을 인쇄 할 수도 있습니다.
Python2 : python2를 사용하는 경우
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Python2의 후행 쉼표는 Python3에서 매개 변수가되므로 인쇄 후 줄 바꿈을 피하기 위해 후행 쉼표를 사용하면 Python3에서는 파이썬 2에서 구문 오류 인 print ( 'Text to print', end = '')처럼 보입니다. .
http://python3porting.com/noconv.html
python3에서 위의 시나리오를 확인하면 :
>>> import sys
>>> print("hi")
hi
파이썬 2.6에서는 함수로 인쇄하기 위해 앞으로 가져 오기가 있습니다. 따라서 구문 오류 및 기타 차이점을 피하려면 향후 import print_function 에서 print ()를 사용하는 파일을 시작해야합니다 . 미래의 수입은 파이썬 2.6에서 작동 이상, 그래서 파이썬 2.5 및 이전 버전 두 가지 옵션이 있습니다. 보다 복잡한 인쇄물을 더 간단한 것으로 변환하거나 Python2 및 Python3에서 작동하는 별도의 인쇄 기능을 사용할 수 있습니다.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
사례 : sys.stderr.write () 또는 sys.stdout.write () (stdout (표준 출력)는 모든 UNIX / Linux 시스템에 내장 된 파이프 임)는 인쇄를 대체하지 않지만, 예 경우에 따라 대안으로 사용할 수 있습니다. 인쇄는 끝에 공백과 줄 바꿈으로 입력을 감싸고 쓰기 기능을 사용하여 쓰는 래퍼입니다. 이것이 sys.stderr.write ()가 더 빠른 이유입니다.
참고 : 로깅을 사용하여 추적 및 디버깅 할 수도 있습니다.
#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