2012-05-31 10 views
5

मैं निम्नलिखित कोड है में पिछले इनपुट पंक्ति हटाएं:अजगर

num = int(raw_input("input number: ")) 
print "\b" * 20 

सांत्वना उत्पादन

तरह
input number: 10 

मैं के बाद उपयोगकर्ता प्रेस ENTER पाठ input number: 10 हटाना चाहते हैं लग रहा है। बैकस्पेस कुंजी \b ऐसा नहीं कर सकता है।

+0

आप किस ऑपरेटिंग सिस्टम के तहत काम करते हैं? –

+0

@MariaZverina उबंटू 12.04 – xralf

उत्तर

6

यह अधिकांश यूनिक्स और विंडोज टर्मिनलों में काम करेगा ... यह बहुत आसान एएनएसआई भागने का उपयोग करता है।

num = int(raw_input("input number: ")) 
print "\033[A        \033[A" # ansi escape arrow up then overwrite the line 

कृपया ध्यान दें कि विंडोज पर आप उपयोग कर एएनएसआई समर्थन सक्षम करने की आवश्यकता हो सकती निम्नलिखित http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneous/commandinterpreteransisupport.html

"\ 033 [ए 'स्ट्रिंग टर्मिनल से व्याख्या की है कर्सर को एक लाइन ऊपर ले जाने के रूप में।

+0

मैंने आपके कोड की कोशिश की, लेकिन पंक्ति अभी भी वहां है (उदाहरण के लिए जब मैं इनपुट नंबर 10) यह निम्नानुसार दिखता है: "इनपुट नंबर: 0" "हो गया" और कर्सर इसके नीचे है। – xralf

+0

क्या आपकी स्ट्रिंग के अंत में पर्याप्त रिक्त स्थान हैं? ध्यान दें कि मेरी लाइन के अंत में रिक्त स्थान ढेर हैं। –

+0

हां, यह बिल्कुल तुम्हारा है। – xralf

-2

आप ओएस मॉड्यूल

import os 
os.system('clear') 

"cls" और "स्पष्ट" का उपयोग कर सकते आदेशों जो एक टर्मिनल (यानी एक डॉस शीघ्र, या टर्मिनल विंडो) साफ हो जाएगा रहे हैं।

निष्क्रिय के लिए:

print "\n" * 100 
+0

मुझे यह आदेश पता है, लेकिन मैं केवल "इनपुट नंबर: एक्स" टेक्स्ट को हटाना चाहता हूं क्योंकि उपरोक्त पाठ को हटाया नहीं जाना चाहिए। – xralf

+0

इसे हटाने की आवश्यकता क्यों है ... आपकी सटीक आवश्यकता क्या है? –

+0

मैं एक लूप में इंटरैक्टिव रूप से पढ़ रहा हूं और टर्मिनल पर ज्यादा टेक्स्ट नहीं लेना चाहता हूं। पूरे संदर्भ को समझाते हुए लंबे और विषय के लिए होगा। – xralf

1

'शब्द वापस' के लिए नियंत्रण दृश्यों रहे हैं और 'वापस लाइन' और कहा कि इस कदम की तरह: सबसे अच्छा तुम कर सकते हो स्क्रीन नीचे लाइनों के बहुत सारे है, जैसे स्क्रॉल करने के लिए है कर्सर तो, आप कर्सर को उस पाठ की शुरुआत में वापस ले जाने का प्रयास कर सकते हैं जिसे आप हटाना चाहते हैं, और रिक्त स्थान के साथ इसे ओवरराइड करना। लेकिन यह बहुत जल्दी जटिल हो जाता है। शुक्र है, पाइथन के पास "उन्नत टर्मिनल हैंडलिंग" के लिए मानक curses module है।

इस के साथ एकमात्र मुद्दा यह है कि यह फिलहाल क्रॉस-प्लेटफार्म नहीं है - यह मॉड्यूल कभी विंडोज़ को पोर्ट नहीं किया गया है। इसलिए, यदि आपको विंडोज का समर्थन करने की आवश्यकता है, तो Console module पर एक नज़र डालें।

+0

क्या आप जानते हैं कि 'curses' मॉड्यूल से कौन से फ़ंक्शन उपयोगी होंगे? – xralf

+0

@xralf आप 'curses.initscr()' को कॉल करके 'विंडो' ऑब्जेक्ट बनाना चाहते हैं, और 'print' और' raw_input' की बजाय विंडो विधियों का उपयोग करके अपना I/O प्राप्त करें। फिर जब आप एक पूरी लाइन को हटाना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि कर्सर उस रेखा पर कहीं और है, और विंडो पर '.deleteln()' पर कॉल करें। – lvc

0
import sys 

print "Welcome to a humble little screen control demo program" 
print "" 

# Clear the screen 
#screen_code = "\033[2J"; 
#sys.stdout.write(screen_code) 

# Go up to the previous line and then 
# clear to the end of line 
screen_code = "\033[1A[\033[2K" 
sys.stdout.write(screen_code) 
a = raw_input("What a: ") 
a = a.strip() 
sys.stdout.write(screen_code) 
b = raw_input("What b: ") 
b = b.strip() 
print "a=[" , a , "]" 
print "b=[" , b , "]"