2012-11-06 22 views
7

Tôi muốn tự động thụt lề dòng tiếp theo của ứng dụng bảng điều khiển nhưng người dùng cần có thể xóa nó. sys.stdout.writeprint làm cho các ký tự không thể xóa được và tôi không thể ghi vào sys.stdin (theo như tôi biết). Tôi chủ yếu cố gắng để có được thụt đầu dòng thông minh nhưng tôi chỉ có thể làm tổ sâu hơn và sâu hơn. Có ý tưởng nào về cách trèo ra ngoài không?Tôi có thể chèn các ký tự có thể xóa trong bộ đệm đầu vào python không?

Chỉnh sửa: Tôi nên lưu ý rằng đây là một phần của chương trình Windows sử dụng IronPython. Trong khi tôi có thể làm điều gì đó huyền ảo hơn (và có thể trong tương lai), tôi hy vọng sẽ nhanh chóng có được một trải nghiệm thú vị hợp lý với rất ít nỗ lực như một điểm khởi đầu.

+3

Tại sao làm điều này dưới dạng ứng dụng giao diện điều khiển? (Nghe có vẻ như nó có thể xứng đáng với cách tiếp cận khác). Nếu bạn muốn người dùng di chuyển con trỏ tự do xung quanh bàn điều khiển, bạn có thể muốn sử dụng ncurses thay vì chỉ các phương thức tích hợp sẵn. –

+1

Nền tảng này sẽ chạy trên nền tảng nào? Nếu Linux, bạn có thể xem xét sử dụng mô-đun readline. – Keith

+0

Có một [pyreadline] (http://pypi.python.org/pypi/pyreadline) hoạt động trên Windows. – Apalala

Trả lời

1

Mô-đun cmd cung cấp giao diện rất đơn giản để tạo giao diện dòng lệnh cho chương trình của bạn. Nó có thể không thể đặt một số ký tự đệm ở phía trước của dòng tiếp theo nhưng nếu bạn đang tìm kiếm một cách rõ ràng để cho người dùng của bạn biết rằng lệnh đã trả về, nó có thể cung cấp một dấu nhắc giống như vỏ ở đầu mỗi hàng. Nếu bạn đã có chức năng định nghĩa cho chương trình của bạn, tích hợp chúng vào một bộ xử lý sẽ là một vấn đề viết một handler mà truy cập vào các chức năng:

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() 

Những điều cần xem xét khi viết một shell tương tác sử dụng cmd

  1. Tên sau do_ là lệnh mà người dùng của bạn sẽ sử dụng để trong ví dụ này, các lệnh có sẵn sẽ là hypot, exit, quit và help.
  2. Nếu không có trọng do_help, kêu gọi sự giúp đỡ sẽ cung cấp cho bạn một danh sách các lệnh có sẵn
  3. Bất kỳ cuộc gọi mà bạn muốn thoát khỏi chương trình sẽ trả về Đúng
  4. Nếu bạn muốn xử lý thông tin nhập từ lời gọi hàm, nói rằng bạn muốn có thể xử lý cuộc gọi như "hypot 3 4", bạn có thể sử dụng biến dòng địa phương trong hàm gọi
Các vấn đề liên quan