2012-11-06 11 views
7

मैं स्वचालित रूप से एक कंसोल ऐप की अगली पंक्ति को इंडेंट करना चाहता हूं लेकिन उपयोगकर्ता को इसे हटाने में सक्षम होना चाहिए। sys.stdout.write और print अपरिहार्य अक्षर बनाएं और मैं sys.stdin (जहां तक ​​मुझे पता है) को नहीं लिख सकता। मैं अनिवार्य रूप से स्मार्ट इंडेंटिंग प्राप्त करने की कोशिश कर रहा हूं लेकिन मैं केवल गहरा और गहरा घोंसला कर सकता हूं। वापस चढ़ने के तरीके पर कोई विचार?क्या मैं पाइथन इनपुट बफर में हटाए जाने योग्य वर्ण डाल सकता हूं?

संपादित करें: मुझे ध्यान रखना चाहिए था कि यह एक विंडोज प्रोग्राम का हिस्सा है जो आयरनपीथन का उपयोग करता है। जबकि मैं कुछ ज्यादा प्रशंसक (और भविष्य में हो सकता है) कर सकता हूं, मैं उम्मीद कर रहा हूं कि शुरुआती बिंदु के रूप में बहुत कम प्रयास के साथ जल्दी से एक सुखद सुखद अनुभव प्राप्त करें।

+3

में स्थानीय लाइन चर का उपयोग कर सकते हैं? (ऐसा लगता है जैसे यह एक और दृष्टिकोण के लायक हो सकता है)। यदि आप चाहते हैं कि उपयोगकर्ता कंसोल के चारों ओर कर्सर को स्वतंत्र रूप से ले जाएं, तो आप केवल अंतर्निहित तरीकों के बजाय ncurses का उपयोग करना चाहेंगे। –

+1

यह किस प्लेटफॉर्म पर चल रहा है? यदि लिनक्स, तो आप रीडलाइन मॉड्यूल का उपयोग कर देख सकते हैं। – Keith

+0

एक [pyreadline] (http://pypi.python.org/pypi/pyreadline) है जो विंडोज पर काम करता है। – Apalala

उत्तर

1

cmd मॉड्यूल आपके प्रोग्राम में कमांड लाइन इंटरफ़ेस बनाने के लिए एक बहुत ही सरल इंटरफ़ेस प्रदान करता है। हो सकता है कि यह कुछ बफर वर्णों को अगली पंक्ति के सामने न रखने में सक्षम न हो, लेकिन यदि आप अपने उपयोगकर्ताओं को यह बताने के लिए एक स्पष्ट तरीका ढूंढ रहे हैं कि आदेश वापस आ गया है, तो यह प्रत्येक की शुरुआत में एक शेल-जैसी प्रॉम्प्ट प्रदान कर सकता है लाइन। आप पहले से ही कार्य करता है, तो अपने कार्यक्रम के लिए परिभाषित किया गया है, उनमें एक प्रोसेसर में एकीकृत समारोह का उपयोग है कि एक हैंडलर लेखन की बात होगी:

import cmd 
import math 

def findHpyot(length, height): 
    return math.sqrt(length **2 + height **2) 

class MathProcessor(cmd.Cmd): 
    prompt = "Math>" 

    def do_hypot(self, line): 
     x = raw_input("Length:") 
     y = raw_input("Height:") 
     if x and y: 
      try: 
       hypot = findHypot(float(x), float(y)) 
       print "Hypot:: %.2f" %hypot 
      except ValueError: 
       print "Length and Height must be numbers" 

    def do_EOF(self, line): 
     return True 

    def do_exit(self, line): 
     return True 

    def do_quit(self, line): 
     return True 

if __name__ == "__main__": 
    cmdProcessor = MathProcessor() 
    cmdProcessor.cmdloop() 

चीजें जब cmd

    का उपयोग कर एक इंटरैक्टिव खोल लिखने पर विचार करने के लिए
  1. do_ के बाद का नाम वह आदेश है जो आपके उपयोगकर्ता उपयोग करेंगे ताकि इस उदाहरण में उपलब्ध आदेश हाइपोट, बाहर निकलें, छोड़ें और सहायता करें।
  2. do_help अधिभावी, मदद बुला आप इस कार्यक्रम सच
  3. लौटना चाहिए आप समारोह कॉल से प्रविष्टियां कार्रवाई करने के लिए चाहते हैं, तो उपलब्ध आदेशों
  4. किसी भी कॉल है कि आप छोड़ना चाहते की एक सूची दे देंगे बिना, आप चाहते थे कहना जैसा कॉल संभालने में सक्षम हो "hypot 3 4" तुम क्यों एक कंसोल अनुप्रयोग के रूप में इस बनाने के समारोह कॉल
संबंधित मुद्दे