2012-12-10 7 views
5

\b नियंत्रण चरित्र, मैं यह समझ के रूप में, पिछले चरित्र को मिटाने के लिए माना जाता नहीं है, इसलिए कुछ (इस \b + एक डेल के साथ-साथ चरित्र होगा): b चरित्र के विपरीत क्या है, यानी एक प्रकार की गैर-मिटाने वाली जगह? इस तरह से काम करता है

>>> print 'pototo\b\b\ba' 
potato 

वहाँ एक चरित्र है आगे बढ़ने के लिए, एक गैर-ओवरराइटिंग स्पेस की तरह?

>>> print 'pototo\r\x\x\xa' 
potato 

जाहिर है एक टाइपराइटर पर एक सामान्य स्थान इस ठीक करना होगा: उम्मीद के उपयोग (मैं इस चरित्र \x कहा जाता है) की तरह कुछ होगा। लेकिन एक टर्मिनल पर एक जगह नीचे पत्र को मिटा देती है।

मेरे उपयोग स्थिति की एक pexpect मिलान प्रकार जहाँ मैं करना चाहते पूर्वव्यापी वापस जाएँ और रंग के साथ एक चरित्र धारा के उत्पादन के कुछ भागों को सजाने के है, और मैं पूरे वर्तमान की एक कैश रखने कि क्या सोच रहा हूँ स्मृति में लाइन आवश्यक होगी या नहीं।

+1

ऐसा लगता है कि [पायथन के "एस्केप अनुक्रम टोकन"] में आगे बढ़ने का कोई तरीका नहीं है (http://docs.python.org/2/reference/lexical_analysis.html#grammar-token-escapeseq) ... –

+0

मुझे विश्वास नहीं है कि ऐसा चरित्र है, कम से कम एक संपूर्ण खोज ने कोई भी प्रकट नहीं किया है। हालांकि, लिनक्स के तहत आप [curses मॉड्यूल] (http://docs.python.org/2/library/curses.html) का उपयोग कर कर्सर की स्थिति को स्पष्ट रूप से सेट करने में सक्षम होना चाहिए। – primo

उत्तर

2

आप इस तरह, अपने टर्मिनल (*), आप कर्सर आगे (CUF) अनुक्रम का उपयोग कर सकते में ANSI escape code sequences पर भरोसा करते हैं कर सकते हैं "सीएसआई n सी ':

print "Pototo\b\b\ba\x1b[2Ces" 

और मिलती है:

Potatoes 

सीएसआई \x1b[ है, और इसका उपयोग एएनएसआई एस्केप कोड अनुक्रमों को शुरू करने के लिए किया जाता है। 2 दाईं ओर जाने के लिए वर्णों की संख्या है, और C सही दिशा में जाने का आदेश है।


(*) एक अच्छा अनुमान यह है कि जब तक आपको विंडोज का समर्थन करने की आवश्यकता नहीं है तब तक आप एएनएसआई कोड पर भरोसा कर सकते हैं।

+0

एक अन्य उपयोग केस: 'प्रिंट' हैलो टिम \ b \ b \ bw \ x1b [2 सी, महान प्रश्न ':) –

+0

अच्छा। 'प्रिंट" pototo \ r \ x1b [3Ca "' काम करने लगता है! – wim

0

आप पात्रों को फिर से लिखना चाहिए:

>>> print 'pototo\rpota' 
potato 

आप के लिए नहीं करना चाहते हैं उन्हें, फिर से लिखें आप curses की तरह एक पुस्तकालय का उपयोग करने के लिए मैन्युअल रूप से कर्सर की स्थिति निर्धारित करने के लिए चाहिए की तुलना में।

+0

इसके साथ समस्या तब है जब आप शब्द के अंत में कुछ भी शामिल नहीं कर सकते (ओवरराइटिंग के बिना)। –

+0

@hayden मेरा मुद्दा यह है कि इन जटिल परिस्थितियों को अनुमति देने के लिए कमांड लाइन नहीं लिखी गई थी। आप पूरी तरह से एक पंक्ति को फिर से लिख सकते हैं (जैसा कि मेरा उत्तर बताता है) लेकिन कुछ और करने की कोशिश कर रहा है, आपके पास पोर्टेबल कोड नहीं होगा। यदि आप ऐसी चीजें करना चाहते हैं तो मैं आपको टर्मिनल हेरफेर के लिए 'शाप' या अन्य लाइब्रेरी का उपयोग करने की सलाह दूंगा। – Bakuriu

+0

क्षमा करें मैंने आपके उत्तर के दूसरे भाग को ठीक से नहीं पढ़ा है। –

संबंधित मुद्दे