इसलिए मैं एक प्रोजेक्ट लिख रहा हूं जहां मैं एक प्रोग्राम चलाता हूं जो लगातार उसी प्रोग्राम चलाने वाले अन्य कंप्यूटरों को संदेश भेजता/भेजता है।टर्मिनल स्क्रीन के शीर्ष या निचले हिस्से में stdin लाइन रखें
डेटा का रिसीवर/प्रेषक धागे पर चल रहा है और प्रिंट को stdout पर चल रहा है। मैं इस तरह सामान मिलता है:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
अब मुद्दा है कि कभी कभी मैं इनपुट करना चाहते हैं टर्मिनल में आदेश, समस्या यह है कि जब मैं एक कमांड और एक नया की जानकारी संदेश या MSG REC
में प्रवेश करने की कोशिश stdout में छपा है । मेरे पास quit
और status
आदि जैसे आदेश हैं
>> इनपुट लाइन इंगित करता है।
कुछ इस तरह हो सकता है:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
>> stat[MSG REC] Message 'sup' received from Bob.
us
तब मैं दर्ज करें और आदेश status
मार डाला लेकिन टर्मिनल में इतना गरीब लग रहा है हो जाता है प्रेस होगा। एक संदेश हर 2-4 सेकंड में दिखाई देता है, इसलिए यह एक मुद्दा है। क्या इसे हल करने का कोई अच्छा तरीका है? मैंने अंतिम पंक्ति से पहले एक नई लाइन को आज़माने और डालने के लिए एएनएसआई कर्सर कमांड का उपयोग करने की कोशिश की ताकि अंतिम पंक्ति हमेशा इनपुट लाइन के रूप में रहेगी और मैं "स्टेट" टाइप कर सकता हूं, थोड़ी देर प्रतीक्षा कर सकता हूं और बिना किसी के "इसे" मुद्दे।
मैंने यह भी देखा कि लोग curses
की सलाह देते हैं लेकिन मेरे प्रोग्राम के साथ इसे एकीकृत करने का प्रयास करने से अन्य चीजों के बीच मेरे आउटपुट की स्वरूपण पूरी तरह से गड़बड़ हो गई है (और मुझे लगता है कि यह शायद अधिक हो सकता है)।
तो वहाँ एक आसान तरीका धागा डालने अंतिम पंक्ति के ऊपर स्थित नया MSG REC
लाइनों 1 लाइन तो अंतिम पंक्ति हमेशा साथ इनपुट लाइन >> और जो कुछ भी मैं लिख दिया के रूप में रहते हैं बनाने के लिए है।
लिनक्स पर पायथन 2.7 का उपयोग करना।
संपादित करें: जेम्स मिल्स ने काम का जवाब दिया: जब भी मेरा धागा एक नई रेखा मुद्रित कर रहा था तब मुझे इसका उपयोग करना पड़ा।
myY, myX = stdscr.getyx();
str = "blah blah"; #my message I want to print
stdscr.addstr(len(lines), 0, str)
lines.append(str)
stdscr.move(myY, myX) #move cursor back to proper position
मुझे अपनी मशीन पर बैकस्पेस को ठीक करने के लिए 'curses.KEY_BACKSPACE' जोड़ना पड़ा। यह भी काम नहीं करता है जैसा कि मैं चाहता हूं, जबकि मेरा धागा हर सेकेंड में नई लाइनों को प्रिंट कर रहा है (मैंने इसे 'stdscr' तर्क के रूप में पारित किया है और लाइनों को वैश्विक बना दिया है), यह कर्सर को मुद्रित रेखा के अंत में ले जाता है तो क्या मैं लिख रहा हूं पिछली पंक्ति के अंत में मुद्रित है और'>> ' – Mohammad
के पास नीचे नहीं है ठीक है इसे ठीक करने में कामयाब रहा है और अब मैं काम कर रहा हूं! मुझे बस अपना धागा नई लाइनों को प्रिंट करने के तरीके को बदलना पड़ा था ताकि प्रिंटिंग करने के बाद कर्सर को सही स्थिति में वापस ले जाया जा सके। मैंने मूल पोस्ट में परिवर्तन जोड़ा। – Mohammad
मुझे खुशी है कि इससे आपको अपनी समस्याओं का समाधान करने में मदद मिली! 'Curses.KEY_BACKSPACE' का उपयोग करना मेरे सिस्टम पर काम नहीं करता है :) –