2012-12-18 11 views
19

मेरे पास एक [प्रोग्राम: x] चल रहा है और यह प्रिंट/sys.stdout.writes कई चीजें लिखता है। [पर्यवेक्षक] के ऑटो बाललॉगर में या stdout_logfile में [प्रोग्राम: x] में से कोई भी इनमें से कोई भी नहीं आता है क्या मुझे कुछ याद आ रही है?पर्यवेक्षक लॉग मेरे आउटपुट को नहीं दिखाते

मैं [प्रोग्राम: x] से मुद्रित या stdout-ed सब कुछ कैप्चर कैसे करूं?

मेरा कार्यक्रम में मैं स्पष्ट रूप से दोनों कर रहा हूँ,

print "something" 
sys.stdout.write("something") 

प्रासंगिक supervisord.conf फ़ाइल

[supervisord] 
childlogdir = %(here)s/../logs/supervisord/ 
logfile = %(here)s/../logs/supervisord/supervisord.log 
logfile_maxbytes = 100MB 
logfile_backups = 10 
loglevel = info 
pidfile = %(here)s/../logs/supervisord/supervisord.pid 
umask = 022 
nodaemon = false 
nocleanup = false 

[program:x] 
directory = %(here)s/../ 
command = python file.py 
autostart=true 
autorestart=true 
redirect_stderr=true 
stdout_logfile = /appropriate-path/to/access.log 
+0

आप कुछ कार्यक्रम 'stdout' को प्रिंट और नहीं कर रहे हैं' stderr '? –

+0

ने अधिक जानकारी के साथ प्रश्न संपादित किया। जब मैं sys.stdout.write करता हूं, तो इसे – zubinmehta

+0

पर प्रिंट करना चाहिए और उस '[प्रोग्राम: ..]' के लिए आपका पर्यवेक्षक कॉन्फ़िगरेशन क्या है? ओह, और यह सुनिश्चित करने के लिए कि यह बफर नहीं है, 'sys.stdout.flush()' को आज़माएं। –

उत्तर

26

अजगर उत्पादन बफ़र है, सुनिश्चित करें कि आप sys.stdout हैंडलर फ्लश लोग इन संदेशों जल्दी ही देखने के लिए:

sys.stdout.flush() 

पायथन 3.3 और ऊपर, आपजोड़ सकते हैंपैरामीटर समारोह आपके लिए यह करने के लिए:

print(something, flush=True) 
+3

आप अपने पर्यवेक्षक कॉन्फ़िगरेशन में एक पंक्ति के साथ PYTHONUNBUFFERED = 1 पर्यावरण परिवर्तक भी सेट कर सकते हैं: पर्यावरण = PYTHONUNBUFFERED = 1 –

41

आप इस तरह अपने कार्यक्रम चला सकते हैं: आप अजगर आधारित है स्क्रिप्ट

python -u file.py 

इस unbuffered उत्पादन

+1

उचित (15char) – Tim

0

का उत्पादन करेगा कि आप नियमित आधार पर फ्लश आउटपुट में बदलना नहीं चाहते हैं या नहीं, तो आप उम्मीद पैकेज से unbuffer का उपयोग कर सकते हैं।

एक Django एक डोकर कंटेनर मैं हाल ही में इस तरह यह उपयोग किया है में आवेदन (एक खोल स्क्रिप्ट से supervisord से चलाने) के लिए:

unbuffer python -u manage.py runserver 0.0.0.0:11000 2>&1 >> /var/log/django.log 
संबंधित मुद्दे