stderr에 쓰는 몇 가지 방법이 있습니다.
# Note: this first one does not work in Python 3
print >> sys.stderr, "spam"
sys.stderr.write("spam\n")
os.write(2, b"spam\n")
from __future__ import print_function
print("spam", file=sys.stderr)
그것은 zen의 Python # 13 † 과 모순되는 것 같습니다. 여기서 차이점은 무엇이며 어떤 방법 으로든 장단점이 있습니까? 어떤 방법을 사용해야합니까?
† 명백한 방법이 있어야합니다.
답변
나는 이것이 유일하게 짧은 + 유연 + 휴대용 + 읽기 가능하다는 것을 알았습니다.
from __future__ import print_function
import sys
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
이 기능 eprint
은 표준 print
기능 과 동일한 방식으로 사용할 수 있습니다 .
>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz
답변
import sys
sys.stderr.write()
내 선택, 더 읽기 쉽고 정확하게 당신이하려는 일과 버전간에 이식 가능하다는 것을 말하십시오.
편집 : ‘pythonic’이라는 것은 가독성과 성능에 대한 세 번째 생각입니다 …이 두 가지를 염두에두고 파이썬을 사용하면 코드의 80 %가 파이썬입니다. 목록 이해력은 자주 사용되지 않는 (가독성) ‘큰 것’입니다.
답변
print >> sys.stderr
Python3에서 사라졌습니다.
http://docs.python.org/3.0/whatsnew/3.0.html 말한다 :
Old: print >> sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)
우리 중 많은 사람들에게, 목적지를 지휘의 끝까지 이끄는 것은 다소 부자연 스럽습니다. 대안
sys.stderr.write("fatal error\n")
더 객체 지향적이며 일반에서 특정으로 우아하게 이동합니다. 그러나 write
이는 1 : 1 대체품이 아닙니다 print
.
답변
logging
아직 언급 한 사람 은 없지만 오류 메시지를 전달하기 위해 로깅이 특별히 생성되었습니다. 기본 구성은 stderr에 쓰는 스트림 핸들러를 설정합니다.
이 스크립트는 :
# foo.py
import logging
logging.basicConfig(format='%(message)s')
log = logging.getLogger(__name__)
log.warning('I print to stderr by default')
print('hello world')
명령 행에서 실행할 때 다음과 같은 결과가 나타납니다.
$ python3 foo.py > bar.txt
I print to stderr by default
및 bar.txt라는이 표준 출력에 인쇄 된 ‘안녕하세요 세계’가 포함됩니다.
답변
들어 파이썬이 내 선택이 될 것입니다 :
print >> sys.stderr, 'spam'
당신은 단순히 문자열로 변환이없이 등 목록 / dicts을 인쇄 할 수 있기 때문에.
print >> sys.stderr, {'spam': 'spam'}
대신에:
sys.stderr.write(str({'spam': 'spam'}))
답변
파이썬 3을 사용하여 다음을 수행했습니다.
from sys import stderr
def print_err(*args, **kwargs):
print(*args, file=stderr, **kwargs)
이제 캐리지 리턴을 피하기 위해 키워드 인수를 추가 할 수 있습니다.
print_err("Error: end of the file reached. The word ", end='')
print_err(word, "was not found")
답변
첫 번째 접근 방식은 다음과 같습니다.
print >> sys.stderr, 'spam'
은 “한…입니다 분명 이 할 수있는 방법”다른 사람은 규칙 # 1 만족하지 않는 ( “아름다운 더 추한 이상입니다.”)