2012-07-16 2 views
2

파이썬으로 CLI를 시뮬레이트하라는 질문을 받았습니다. 파이썬으로 CLI 쉘을 시뮬레이트

내가 또한, 여기에 "splitit"나는 처음 작동 될 것입니다 만 3 argumets을 허용리스트의 길이를 확인 않으며, 두 번째와 세 번째는 인수입니다

def somefunction(a,b): 
    //codes here 
//consider some other functions too 

print "--- StackOverFlow Shell ---" 
while True: 
    user_input = raw_input("#> ") 
    splitit = user_input.split(" ") 
    if splitit[0] == "add": 
     firstNum = splitit[1] 
     sNum = splitit[2] 
     result = somefunction(firstNum, sNum) 
     print result 
    //consider some other elif blocks with "sub", "div", etc 
    else: 
     print "Invalid Command" 

을 한 것입니다 인수가 3보다 큰 경우에 수행 할 함수가있는 함수입니다.

어떻게 든 나도 그럭저럭 잘 만들 수 있지만 같은 것을 성취하기위한 더 좋은 방법이 있습니까?

+0

명령 당 ", 빠르게 속도가 느려거야, 그리고 당신이 구문 분석과 논리로 자신의 구문을 혼합 할 경우 쉘이 이상 유지할 될 것입니다 : 이것은 얼마나 쉽게 ". tokenizer, parser (일부 명령 데이터베이스 포함) 및 인터프리터 (실행 단위), 각 명령에 대해 동일한 단계를 다시 반복하는 대신 원시 입력이 실행 전에이 단계를 통과하는 파이프 라인으로 분할하십시오. –

+0

예 2-3 기능을 위해 나는 그걸로 잘 됐어 ...하지만 나는 initialising 동안 인수를 통과하지 않도록 요청했다. 내 교사는 2-3 명령이 좋다고 말했지만 거대한 프로그램의 경우 유지 관리가 어려울 것입니다. 전 전혀 모릅니다. 그리고 모릅니다. 그것을 만드는 방법은 사용자 정의 된 프롬프트라고 생각하십시오. – Whiskey

답변

10

사용 파이썬 CMD 모듈 :

확인 몇 가지 예는 다음 페이지에 주어진 라인 지향 명령 해석기

http://www.doughellmann.com/PyMOTW/cmd에 대한

http://docs.python.org/library/cmd.html # 지원 - # 만들기 라인 지향 명령 프로세서가

prompt은 사용자에게 새 명령을 요청할 때마다 인쇄 할 문자열로 설정할 수 있습니다.

intro은 프로그램 시작시 인쇄되는 "환영 메시지"입니다.

예 :

import cmd 

class HelloWorld(cmd.Cmd): 
    """Simple command processor example.""" 

    prompt = 'prompt: ' 
    intro = "Simple command processor example." 
+0

실제로 나는 그것이 좋았지 만 어떤 방법으로는 프롬프트를 수정할 수 없었는지 확인했다. cmd 모듈은 (cmd)와 같은 프롬프트를 제공합니다. 어떻게 든 프롬프트는 "#>"또는 "StackOverFlow ~ #"와 같은 필요에 따라 customisez가 될 수 있습니다. 그러면 그걸로 문제가되지 않습니다. – Whiskey

+1

대답 pls 체크 – avasal

+0

고마워, 내 선생님이 찾고 있었던 것 같아. 수락 됨! – Whiskey

1

당신은 VTE lib 디렉토리를 체크 아웃해야한다는 :

http://earobinson.wordpress.com/2007/09/10/python-vteterminal-example/

정말 잘 작동하고 당신은 매우 쉽게 그 모양을 사용자 정의 할 수 있습니다. 더 이상의 약 10 명령을 수 있다면,

# make terminal 
    terminal = vte.Terminal() 
    terminal.connect ("child-exited", lambda term: gtk.main_quit()) 
    terminal.fork_command() 

    # put the terminal in a scrollable window 
    terminal_window = gtk.ScrolledWindow() 
    terminal_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
    terminal_window.add(terminal) 
+0

응답에 감사드립니다 ... 선생님이 cmd 모듈을 원했지만 vte가 나를 끌어 모았습니다. 어쩌면 제가 VTE 라이브러리를 이해할 수 있습니다. – Whiskey

+0

투표 해주세요. – Fabrizio