अगर कोई सही मायने में उस डेटा को चाह रहा था, तो मैं सुझाव दूंगा कि gdb डिबगर को अजगर दुभाषिया के साथ जोड़ा जाए, पल-पल कार्य को रोकना, कॉल करना fsync(1)
( stdout ), इससे अलग होना (प्रक्रिया को फिर से शुरू करना) और आउटपुट फाइल के अनुसार जाना।
एक नज़र डालें जो /proc/$(pidof python)/fd
मान्य फ़ाइल वर्णनकर्ता को देखने के लिए। $(pidof x)
' x
' नाम की प्रक्रिया का PID लौटाता है ।
# your python script is running merrily over there.... with some PID you've determined.
#
# load gdb
gdb
#
# attach to python interpreter (use the number returned by $(pidof python))
attach 1234
#
# force a sync within the program's world (1 = stdout, which is redirected in your example)
call fsync(1)
#
# the call SHOULD have returned 0x0, sync successful. If you get 0xffffffff (-1), perhaps that wasn't stdout. 0=stdin, 1=stdout, 2=stderr
#
# remove our claws from poor python
detach
#
# we're done!
quit
मैंने इस विधि का उपयोग वर्किंग डायर को बदलने के लिए किया है, फ्लाई पर ट्वीक सेटिंग्स ... कई चीजें। काश, आप केवल उन फ़ंक्शन को कॉल कर सकते हैं जो रनिंग प्रोग्राम में परिभाषित हैं, fsync
हालांकि अच्छी तरह से काम करता है।
(gdb कमान ' info functions
' कार्यों उपलब्ध सभी सूची जाएगा। सावधान हालांकि। आप ऑपरेटिंग रहे LIVE एक प्रक्रिया पर।)
वहाँ भी कमांड है peekfd
( psmisc
डेबियन जेसी और अन्य पर पैकेज में पाया गया ) जो आपको यह देखने की अनुमति देगा कि प्रक्रिया के बफ़र्स में क्या छुपा है। फिर से, /proc/$(pidof python)/fd
आप पीएफ के तर्क के रूप में देने के लिए आपको मान्य फ़ाइल डिस्क्रिप्टर दिखाएंगे।
यदि आपको -u
अजगर के बारे में याद नहीं है , तो आप हमेशा stdbuf
(/ coreutils
, पहले से स्थापित) के साथ एक कमांड को उपसर्ग कर सकते हैं , जिसे स्टड / stdout / stderr को असंबद्ध, लाइन बफर या वांछित के रूप में बफ़र करने के लिए सेट करें:
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
बेशक, man pages
आपके दोस्त हैं, हे! शायद एक उपनाम भी यहाँ उपयोगी हो सकता है।
alias python='python -u'
अब आपका अजगर हमेशा -u
आपके सभी कमांड लाइन प्रयासों के लिए उपयोग करता है !