अजगर के साथ काम नहीं कर रहा है?


102

मैंने एक पाइथन लिपि बनाई जो एक अनंत लूप का उपयोग करके वेब सर्वर के साथ संचार करती है। मैं हर संचार डेटा को एक फ़ाइल में लॉग इन करना चाहता हूं और साथ ही उन्हें टर्मिनल से मॉनिटर करना चाहता हूं। तो मैं इस तरह टी कमान का इस्तेमाल किया।

python client.py | tee logfile

हालाँकि, मुझे टर्मिनल और लॉगफ़ाइल से कुछ नहीं मिला। अजगर स्क्रिप्ट ठीक काम कर रही है। यहाँ क्या हो रहा है? क्या मैं कुछ भूल रहा हूँ?

कुछ सलाह की सराहना की जाएगी। पहले ही, आपका बहुत धन्यवाद।


3
बफ़रिंग पाइप और टर्मिनलों के लिए अलग-अलग व्यवहार करता है। sys.stdout.flush()जब भी आप एक लाइन लॉग करते हैं, तो आपको अपनी स्क्रिप्ट से एक स्पष्ट करने की आवश्यकता हो सकती है ।
लुकास ग्राफ

असंबद्ध उत्पादन को ट्रिगर करने के अन्य तरीकों के लिए देखें stackoverflow.com/q/107705/1328439
दिमित्री चुबरोव

जवाबों:


178

से man python:

   -u     Force stdin, stdout and stderr to  be  totally  unbuffered.   On  systems
          where it matters, also put stdin, stdout and stderr in binary mode.  Note
          that there is internal buffering in xreadlines(), readlines()  and  file-
          object  iterators  ("for  line  in sys.stdin") which is not influenced by
          this option.  To work around this, you will want to use  "sys.stdin.read‐
          line()" inside a "while 1:" loop.

तो आप क्या कर सकते हैं:

/usr/bin/python -u client.py >> logfile 2>&1

या उपयोग कर रहा है tee:

python -u client.py | tee logfile

1
एक विकल्प का उपयोग करना होगा script, जो बफरिंग को भी अक्षम करता है और इसके अतिरिक्त नियंत्रण अनुक्रम ( C-a, कर्सर कुंजी आदि) काम करता है: stackoverflow.com/a/39269661/15690
blueyed

अति उत्कृष्ट! इसने मेरे रास्पबेरी पाई 3 पर पायथन 3 में भी काम किया, जो रास्पियन जेसी से सुसज्जित है: python3 -u clientfox | टी लॉगफ़ाइल
एंटोनिनो

एक नोट: अजगर, जैसे कई अन्य कमांड लाइन बफ़र का उपयोग करेंगे यदि स्टड और स्टडआउट कंसोल हैं, लेकिन परिणाम फ़ाइल या पाइप पर पुनर्निर्देशित होने पर पूर्ण बफ़र किया जाता है। teeपाइप की तरह देखा जाता है (जो यह है) और हाइब्रिड नहीं: यह कंसोल को लिखता है। नोट: व्यवहार को एक अजगर कार्यक्रम के अंदर भी नियंत्रित किया जा सकता है।
जियाकोमो केटेनज़ी

एक और नोट: python -u client.py | tee >> logfileकाम नहीं करेगा। >>एक फाइल करने के लिए बफ़र लेखन के एक अन्य मामले में पेश होगा। यही तो tee -aहल है।
तानीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.