में अन्य थ्रेड द्वारा त्वरित ओवरराइट किए बिना raw_input() से इनपुट पढ़ना मैं कच्चे_इनपुट() का उपयोग कर कंसोल पर उपयोगकर्ता इनपुट कमांड को देने की कोशिश कर रहा हूं, यह ठीक काम करता है। समस्या यह है कि मेरे पास पृष्ठभूमि धागे हैं जो कभी-कभी स्क्रीन पर लॉग-सूचना आउटपुट करते हैं और जब वे करते हैं तो वे इनपुट प्रॉम्प्ट को गड़बड़ कर देते हैं (क्योंकि आउटपुट जहां भी कर्सर इस समय होता है)।Python
यह एक छोटा पायथन प्रोग्राम है जो मुझे बताता है कि मेरा क्या मतलब है।
Prompt> Hello World
Hello World
Hello World
Hello World
test
You typed test
Prompt> Hello World
Hello World
Hello World
hellHello World
o
You typed hello
Prompt> Hello World
Hello World
Hello World
Hello World
क्या मैं चाहता हूँ शीघ्र धागे से उत्पादन के साथ स्थानांतरित करने के लिए के लिए है:
#!/usr/bin/env python
import threading
import time
def message_loop():
while True:
time.sleep(1)
print "Hello World"
thread = threading.Thread(target = message_loop)
thread.start()
while True:
input = raw_input("Prompt> ")
print "You typed", input
यह यह कैसा जब मैं इसे चलाने के देख सकता का एक उदाहरण है। इस तरह:
Hello World
Hello World
Prompt> test
You typed test
Hello World
Hello World
Hello World
Hello World
Hello World
Prompt> hello
You typed hello
Hello World
Hello World
Hello World
Hello World
Prompt>
बदसूरत हैक का उपयोग किए बिना इसे कैसे प्राप्त किया जाए इस पर कोई विचार? :)
यह वही है जो मैं खोज रहा था। धन्यवाद :) – Jim
['आशीर्वाद 'मॉड्यूल] (https://pypi.python.org/pypi/blessings/) आउटपुट को प्रारूपित करने और टर्मिनल के गले में बहुत गहराई तक पहुंचने के बिना चारों ओर स्थानांतरित करने की अनुमति देता है। – jfs
सावधान रहें, कुछ पायथन संस्करणों पर सावधान रहें यदि टर्मिनल का आकार 'रीडलाइन' मॉड्यूल में बग के कारण रनटाइम के दौरान बदल दिया गया है जो टर्मिनल आकार बदलने की घटनाओं को अनदेखा कर देता है (इसलिए यह उसके आंतरिक बफर का आकार बदलता नहीं है और यह कॉलम को तोड़ता है -काउंटिंग तर्क)। Https://bugs.python.org/issue23735 देखें। यह सौभाग्य से पाइथन 3.5 में तय किया गया प्रतीत होता है। किक-गधे अन्यथा जवाब :) – Thomas