2010-08-22 8 views

Répondre

3

Qu'est-ce que vous proposez est une mauvaise idée, mais si vous insistez à le faire de toute façon, consultez le mod_wsgi configuration directives:

WSGIRestrictStdout

Description: Enable restrictions on use of STDOUT. 
Syntax:  WSGIRestrictStdout On|Off 
Default:  WSGIRestrictStdout On 
Context:  server config 
Module:  mod_wsgi.c 

Une application Python WSGI bien conduite ne devrait jamais tenter d'écrire des données directement à sys.stdout ou utilisez l'instruction d'impression sans l'orienter vers un autre objet fichier . C'est parce que les moyens d'hébergement WSGI applications telles que CGI utilisent la sortie standard comme mécanisme pour envoyer le contenu d'une réponse au serveur Web . Si une application WSGI était pour écrire directement dans sys.stdout, pouvait interférer avec le fonctionnement de l'adaptateur WSGI et entraîner une corruption du flux de sortie.

Dans l'intérêt de la promotion de la portabilité des applications WSGI, mod_wsgi restreint l'accès à sys.stdout et déclenche une exception si une tentative est faite d'utiliser sys.stdout explicitement.

La seule fois que l'on pourrait vouloir supprimer cette restriction est purement à de Convenience de pouvoir utiliser l'instruction d'impression pendant le débogage d'une application, ou si un troisième module partie ou de l'application WSGI était erreur en utilisant l'impression quand il ne devrait pas. Si les restrictions d'utilisation de sys.stdout sont supprimées, toutes les données qui lui sont écrites seront envoyées à à sys.stderr et apparaîtront dans le fichier journal des erreurs Apache.

6

poste de Graham Voir Dumpleton:

+1

En particulier, notez que si vous utilisez mod_wsgi 3.X ou plus tard, ce n'est pas du tout un problème, car la valeur par défaut a été modifiée pour permettre à sys.stdout d'être utilisé car trop de gens étaient paresseux pour corriger le code. J'espère juste que vous n'avez jamais besoin d'utiliser les adaptateurs CGI/WSGI pour l'instant parce que les choses vont bousiller si vous les imprimez sur sys.stdout avec eux. –

8

Quant à quick print, juste peut simplement utiliser:

print >>sys.stderr, 'log msg' 

- il atterrit dans error.log, bien sûr.

+0

Une autre façon d'imprimer rapidement sur stderr est 'sys.stderr.write ('log mgs') ' – FedericoCapaldo

+0

cela ne fonctionne pas django project dans pycharm – Osgux