2011-08-25 14 views
5

में आउटपुट को फिर से कैसे पुनर्स्थापित कर सकता हूं web.py के बारे में मैं आउटपुट को किसी अन्य आउटपुट गंतव्य पर लॉग फ़ाइल की तरह कैसे पुन: सही कर सकता हूं या इसे पूरी तरह से छुटकारा पा सकता हूं?मैं web.py

+1

क्या उत्पादन? एचटीएमएल आउटपुट ब्राउज़र या 'प्रिंट() 'आउटपुट को कंसोल पर भेजा गया है? –

+0

कंसोल पर भेजा गया प्रिंट() आउटपुट। – Cletrix

उत्तर

2

print द्वारा कंसोल आउटपुट sys.stdout पर भेजा गया है। यदि आप चाहें तो इस स्ट्रीम को एक खुली फ़ाइल या अपनी फ़ाइल-जैसी ऑब्जेक्ट से प्रतिस्थापित कर सकते हैं। एकमात्र आवश्यकता यह है कि आपकी कस्टम ऑब्जेक्ट में write() विधि है।

class MyOutputStream(object): 

    def write(self, data): 
     pass # Ignore output 

import sys 
sys.stdout = MyOutputStream() 

print("Test") # Output is ignored 

आप तक पहुँचने या मूल उत्पादन धारा को बहाल करना चाहते हैं, तो sys.__stdout__ का उपयोग करें।

sys.stdout = sys.__stdout__ # Restore stdout 
+0

मेरे लिए काम नहीं करता है। सर्वर आउटपुट में यह है: 192.168.0.123 ध्यान 2 9 31 - - [27/अगस्त/2011 11:57:45] "HTTP/1.1 पोस्ट/पैराम्स" - 200 ओके 1 9 2.168.0.123:522937 - - [27/अगस्त/2011 11:57:47] "HTTP/1.1 पोस्ट/पैराम्स" - 200 ओके 1 9 2.168.0.123 विचार 2 9 42 - - [27/अगस्त/2011 11:57:49] "HTTP/1.1 पोस्ट/पैराम्स" - 200 ओके 1 9 2.168.0.123 ID2947 - - [27/अगस्त/2011 11:57:50] "HTTP/1.1 पोस्ट/पैराम्स" - 200 ठीक – Cletrix

+1

मैं फिर कोशिश करता हूं, और काम करता है। tks – Cletrix

+0

'web.httpserver.sys.stderr = MyOutputStream()' यदि आप अपने प्रोग्राम से अन्य आउटपुट को दबाना नहीं चाहते हैं –

0

आप इस प्रकार का फाइल करने के लिए मुद्रित कर सकते हैं:

file = open("/tmp/test.txt", "wt") 
print >> file, "Foobar" 

अजगर भी लॉग कार्यों के लिए प्रवेश मॉड्यूल प्रदान करता है।

हालांकि प्रश्न की गुणवत्ता आप जो उत्पादन करने की कोशिश कर रहे हैं उसकी व्याख्या के लिए बहुत अधिक छोड़ देती है और क्यों, एक अच्छा जवाब देना असंभव है। कृपया अधिक जानकारी के लिए प्रश्न संपादित करने का प्रयास करें।

0

हालांकि यह एक पुराने धागा है, यह में चल रहे लोगों को इस solution from the web.py cookbook

यह मूल रूप से कैसे एक डिफ़ॉल्ट HTTPServer के लिए लॉगिंग नियंत्रित करने के लिए बताते हैं में रुचि हो सकती।

अद्यतन:

एक अन्य समाधान सीधे web.py के कोड बदल रहा हो सकता है और एक फाइल करने के लिए httpserver.py में प्रिंट अनुप्रेषित की सिफारिश की तरह here होगा।

4

मुझे फ़ाइल में अनुरोध/प्रतिक्रिया ईवेंट लॉग करने में सक्षम होने के लिए http://webpy.org/cookbook/logging से उदाहरण को संशोधित करना पड़ा। असल में, WsgiLogging के एक उदाहरण को पार करने के लिए (लिंक किए गए उदाहरण के अनुसार) init ओवरलोड करता है, कॉल फ़ंक्शन को अधिभारित करने की भी आवश्यकता है।

class FileLog(WsgiLog): 
    def __init__(self, application): 
    WsgiLog.__init__(
     self, 
     application, 
     logformat = '[%(asctime)s][%(name)s][%(levelname)s]: %(message)s', 
     debug = True, 
     tofile = web.config.log_tofile, 
     toprint = False, 
     file = web.config.log_file, 
     loglevel = logging.DEBUG 
     ) 

    def __call__(self, environ, start_response): 
    def hstart_response(status, response_headers, *args): 
     out = start_response(status, response_headers, *args) 
     try: 
     logline=environ["SERVER_PROTOCOL"]+" "+environ["REQUEST_METHOD"]+" "+environ["REQUEST_URI"]+" - "+status 

     except err: 
     logline="Could not log <%s> due to err <%s>" % (str(environ), err) 

     self.logger.info(logline) 

     return out 

    return super(FileLog, self).__call__(environ, hstart_response) 

web.config चर अपने मुख्य समारोह में स्थापित कर रहे हैं

import sys 
import os 
import datetime, time 
import optparse 
import logging 
from wsgilog import WsgiLog 

if __name__ == "__main__": 

    parser = optparse.OptionParser() 


    parser.add_option("--logfile", dest="logfile", default="", 
       help="OPTIONAL send log messages to specified file instead of std out") 

    (options, args) = parser.parse_args() 

    #P Need to "eat" all of the passed in args because webpy will try to interpret them first 
    sys.argv = [] 

    webpyapp = web.application(urls, locals()) 

    if hasattr(options, "logfile") and options.logfile != '': 
    web.config.log_file = options.logfile 
    web.config.log_toprint = False 
    web.config.log_tofile = True 
    webpyapp.run(FileLog) 
    else: 
    webpyapp.run() 

यह अनुरोध घटनाओं और निर्दिष्ट फ़ाइल के जवाब प्रवेश करेंगे इस

[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 OPTIONS /api/sessions/5399d05f41f0 - 200 OK 
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0 - 200 OK 
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0/tasks/ - 200 OK 
[Tue, 01 Apr 2014 17:40:56][wsgilog.log][INFO]: HTTP/1.1 GET /api/sessions/5399d05f41f0/tasks//messages/?timestamp__gt=1396291350 - 200 OK 

संशोधित की तरह, फ़ाइल में आउटपुट बनने के तरीके को बदलने के लिए FileLogger में 'logformat' चर।

जहां तक ​​मैं कह सकता हूं, वेब.py ढांचे द्वारा उत्पन्न अनुरोध/प्रतिक्रिया संदेशों के आउटपुट को दबाए रखने का कोई तरीका नहीं है। घटनाओं को मुद्रित करने के लिए यह अपनी कक्षा (httpsMVERware में httpsMVERware) का उपयोग करता है। FileLogger बस खुद को विभिन्न लॉगर्स में जोड़ता है, यह LogMiddleware को प्रतिस्थापित नहीं करता है।

एक बार जब आप फ़ाइल में जा रहे लॉगिंग लॉगिंग कर लेते हैं, तो आप केवल stdout और stderr/dev/null के आउटपुट को रीडायरेक्ट कर सकते हैं;

./yourapp.py > /dev/null 2> /dev/null 

आशा है कि इससे मदद मिलेगी और शुभकामनाएँ!

आरडीपी

0

यह से छुटकारा पाने के

web.config.debug = झूठी अभी भी मदद की नहीं किया। कुछ आउटपुट अभी भी किया गया था। फ़ाइल में

टिप्पणी बाहर लाइन: C: \ Python27 \ लिब \ साइट-संकुल \ वेब \ httpserver.py

लाइन:

print >> outfile, utils.safestr(msg) -> 
#print >> outfile, utils.safestr(msg) 
संबंधित मुद्दे