मैं एक प्रोग्राम डिबग करने की कोशिश कर रहा हूं जो बहुत अधिक डेटा उत्पन्न करता है। लेकिन जिस घटना को मैं डिबग करना चाहता हूं वह यादृच्छिक समय के बाद होता है (मैं इसे बाध्य नहीं कर सकता)। इसलिए मुझे अपने शेल में स्टडआउट और स्टाडर देखना होगा और आगे के विश्लेषण और व्यवधान के लिए एक ही आउटपुट को एक फाइल में सेव करना होगा जैसे ही मुझे यह दिखाई देगा कि मुझे अपने शेल आउटपुट पर क्या चाहिए।
मुझे इस script
आदेश पर उबंटू धागा मिला, लेकिन मैं इसे काम करने के लिए नहीं कह सकता, स्क्रिप्ट कहती है:
$ script "./client -p 4242 -n test"
Script started, output file is ./client -p 4242 -n test
और फिर बाहर निकल जाता है। फ़ाइल में है:
Script started on Thu Jun 26 13:51:12 2014
Script done on Thu Jun 26 13:51:12 2014
तो script
काम नहीं करता है । ./client
फ़ाइल एक अजगर स्क्रिप्ट है। मैंने इसे लॉन्च करने की भी कोशिश की $ python client -p 4242 -n test
लेकिन यह भी काम नहीं कर रहा है।
मैंने उसी धागे पर कुछ उत्तरों के साथ tee
और एक पाइप को भी देखा, लेकिन मैं इसे अपने शेल के आउटपुट के लिए नहीं पा सकता हूं और देख सकता हूं कि क्या चल रहा है:
$ ./client -p 4242 -n test | tee output.log
मुझे कुछ नहीं होने के बिना एक प्रतीक्षा कर्सर देता है। तो tee
काम नहीं करता है ।
क्या कोई और उपाय है या क्या मैं कुछ समय के बाद कार्यक्रम को रुकने और बाधित करने के लिए तैयार हूं और आशा करता हूं कि यह उस घटना से गुजरेगा जिसकी मुझे तलाश है?
आपकी मदद के लिए बहुत बहुत धन्यवाद!
PS मैं zshell पर हूं (ओह-माय-zsh के साथ), मैक OSX 10.9.3, पायथन 2.7.5
संपादित करें: मुझे उल्लेख करना पड़ सकता है कि मैं multiprocessing
मॉड्यूल का उपयोग कर रहा हूं और ./client
स्क्रिप्ट कई अन्य Process
es को लॉन्च करती है । क्या यह उस कारण से हो सकता है? फिर भी मुझे समझ नहीं आ रहा है कि यह ./client
प्रक्रिया आउटपुट को क्यों नहीं पकड़ेगी ...
EDIT2: मैंने नीचे माटेयो से उत्तर की कोशिश की (आपकी मदद के लिए बहुत बहुत धन्यवाद) और यह अजनबी और अजनबी बना रहा है:
यदि प्रक्रिया विफल हो जाती है (सर्वर शटडाउन है), तो मैं आउटपुट देख सकता हूं:
$ ./client -p 4242 -n test 2>&1 | tee output.log
Process Process-1:
Client # 1: Could not connect to server. Stopping.
Spawner: New client # 1 started...
Done.
$
लेकिन अगर ऐसा लगता है कि यह चल रहा है, तो मुझे कुछ नहीं दिखता:
$ ./client -p 4242 -n test 2>&1 | tee output.log
^C [voluntary interrupt after a lot of waiting]
$ cat output.log
$
ऊपर दिए गए लॉग में (जहां यह विफल रहता है), आप देख सकते हैं कि नई प्रक्रिया मुख्य एक ( ) से पहले प्रिंट करती है Spawner
, हालांकि इसके बाद शुरू हुई। तो यह वास्तव में कुछ अजीब उत्पादन जादू की तरह लग रहा है।
print
पायथन (2.7.5) का बयान है।
tee
औरscript
कार्यक्रम के उत्पादन पर कब्जा नहीं कर रहे हैं, तो कार्यक्रम कुछ और "चालाक" से सिर्फ stdout / stderr को लिखने कर रहे होंगे। यह लिखने के लिए हो सकता है / dev / tty, या यह अपने व्यवहार को बदल सकता है जब stdout / stderr एक TTY नहीं है।