문제

나는 mod_wsgi를 사용하고 있으며 print () 명령을 과도하게 작성할 수 있는지 궁금해하고있다 (쓸모 없기 때문에).

이 작업을 수행하지 않습니다.

print = myPrintFunction

구문 오류이므로. :(

도움이 되었습니까?

해결책

Python 2.X의 인쇄는 기능이 아니므로 직접 불가능합니다.

그러나 당신은 할 수 있습니다. sys.stdout을 무시합니다.

당신이 Python 3.0에 있다면 인쇄는 이제 함수입니다 그러면 올바른 서명이 있다고 가정하면 작동 할 것입니다. 또한 참조하십시오 관련 질문 이 사이트에서.

다른 팁

일 것이다

import sys
sys.stdout = MyFileWrapper()

아니면 비슷한 작품?

3.0을 사용하는 경우 인쇄는 기능입니다. 2.6을 사용하는 경우 가능합니다 from __future__ import print_function 인쇄 기능을 계속하십시오.

<= 2.5 인 경우 다른 사람들이 제안한 것처럼 stdout을 교체 할 수 있지만 WSGI 서버가 여러 스레드로 앱을 동시에 호출 할 경우 매우 조심하십시오. 너 할 것이다 동시 요청이 동일한 파이프로 전송되는 것으로 끝납니다.

나는 그것을 테스트하지 않았지만 다음과 같은 것을 시도 할 수 있습니다.

import sys
import threading

class ThreadedStdout(object):
    def __init__(self):
        self.local = threading.local()
    def register(self, fh):
        self.local.fh = fh
    def write(self, stuff):
        self.local.fh.write(stuff)

sys.stdout = ThreadedStdout()

def app(environ, start):
    sys.stdout.register(environ['wsgi.stdout'])

    # Whatever.

apache/mod_wsgi의 sys.stdout에 'print'를 사용하는 것이 의도적으로 제한되어 있음을 주목할 가치가 있습니다. 휴대용 WSGI 애플리케이션은 일부 WSGI 구현이 서버에 통신하는 데 사용하므로 Sys.Stdin 또는 Sys.Stdout을 사용해서는 안됩니다.

따라서 Apache/mod_wsgi는 다른 WSGI 구현에 휴대 할 수 있도록 WSGI 응용 프로그램을 작성하도록 강요하려고합니다.

불행히도, 너무 많은 사람들이 좋은 코드 작성에 관심이없는 것처럼 보이므로 mod_wsgi 3.0을 사용하면 sys.stdout에 글을 써서 출력을 'sys.stderr'로 리디렉션하지 않고 '인쇄'를 사용할 수 있습니다.

어느 쪽이든, mod_wsgi 문서는 3.0 이전에 mod_wsgi 버전에서 제한을 제거하는 방법에 대해 자세히 설명합니다. 특히 WSGIRESTRICTSTDOUT 지시문에 대한 문서를 참조하십시오. 디버깅 기술에 대한 문서는 또한 문제와 sys.stdout을 sys.stderr에 매핑하는 것에 대해 이야기합니다.

이 문제를 다음과 같이 요약 한 주석을 읽을 수 있습니다.

http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard output.html

Paolo가 언급했듯이 STDOut을 파일과 같은 다른 소스로 리디렉션 할 수는 있지만 필요하지 않을 것입니다. 나는 그것을 필요로하지 않았다. 실제로 물건을 기록해야한다면 처음에는 로깅을 사용하고 있습니까? 또한 언제라도 물건을 인쇄하지 마십시오. 사용하는 타사 라이브러리는 할 수 있습니다. 그냥 리디렉션하고 가십시오.

이 문제에 대한 가장 간단한 해결책은 모든 stdout을 Stderr로 리디렉션하는 것입니다. WSGI 구성 파일에서 필요에 따라 리디렉션하십시오.

sys.stdout = sys.stderr
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top