में आउटपुट को फिर से कैसे पुनर्स्थापित कर सकता हूं web.py के बारे में मैं आउटपुट को किसी अन्य आउटपुट गंतव्य पर लॉग फ़ाइल की तरह कैसे पुन: सही कर सकता हूं या इसे पूरी तरह से छुटकारा पा सकता हूं?मैं web.py
उत्तर
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
मेरे लिए काम नहीं करता है। सर्वर आउटपुट में यह है: 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
मैं फिर कोशिश करता हूं, और काम करता है। tks – Cletrix
'web.httpserver.sys.stderr = MyOutputStream()' यदि आप अपने प्रोग्राम से अन्य आउटपुट को दबाना नहीं चाहते हैं –
आप इस प्रकार का फाइल करने के लिए मुद्रित कर सकते हैं:
file = open("/tmp/test.txt", "wt")
print >> file, "Foobar"
अजगर भी लॉग कार्यों के लिए प्रवेश मॉड्यूल प्रदान करता है।
हालांकि प्रश्न की गुणवत्ता आप जो उत्पादन करने की कोशिश कर रहे हैं उसकी व्याख्या के लिए बहुत अधिक छोड़ देती है और क्यों, एक अच्छा जवाब देना असंभव है। कृपया अधिक जानकारी के लिए प्रश्न संपादित करने का प्रयास करें।
हालांकि यह एक पुराने धागा है, यह में चल रहे लोगों को इस solution from the web.py cookbook
यह मूल रूप से कैसे एक डिफ़ॉल्ट HTTPServer के लिए लॉगिंग नियंत्रित करने के लिए बताते हैं में रुचि हो सकती।
अद्यतन:
एक अन्य समाधान सीधे web.py के कोड बदल रहा हो सकता है और एक फाइल करने के लिए httpserver.py
में प्रिंट अनुप्रेषित की सिफारिश की तरह here होगा।
मुझे फ़ाइल में अनुरोध/प्रतिक्रिया ईवेंट लॉग करने में सक्षम होने के लिए 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
आशा है कि इससे मदद मिलेगी और शुभकामनाएँ!
आरडीपी
यह से छुटकारा पाने के
web.config.debug = झूठी अभी भी मदद की नहीं किया। कुछ आउटपुट अभी भी किया गया था। फ़ाइल में
टिप्पणी बाहर लाइन: C: \ Python27 \ लिब \ साइट-संकुल \ वेब \ httpserver.py
लाइन:
print >> outfile, utils.safestr(msg) ->
#print >> outfile, utils.safestr(msg)
क्या उत्पादन? एचटीएमएल आउटपुट ब्राउज़र या 'प्रिंट() 'आउटपुट को कंसोल पर भेजा गया है? –
कंसोल पर भेजा गया प्रिंट() आउटपुट। – Cletrix