cmd 모듈에는 Cmd라는 클래스가 하나만 있습니다. 이것은 라인 지향 명령줄 인터프리터를 위한 사용자 정의 프레임워크의 기본 클래스로 사용됩니다.
명령
이 클래스 또는 그 하위 클래스의 객체는 라인 지향 인터프리터 프레임워크를 제공합니다. 서브클래스에 의해 상속된 이 클래스의 중요한 메소드는 다음과 같습니다.
cmdloop()
이 메서드는 개체를 루프로 보내고 입력을 받아 클래스의 적절한 명령 처리기 메서드로 보냅니다.
루프가 시작되면 소개 메시지(cmdloop() 메서드에 매개변수로 제공)가 프롬프트 속성으로 사용자 정의할 수 있는 기본(cmd) 프롬프트와 함께 표시됩니다.
인터프리터 개체는 두 부분으로 사용자 입력을 인식합니다. 'do_' 접두사가 붙은 첫 번째 부분은 클래스에서 메소드로 처리되고 두 번째 부분은 메소드에 대한 매개변수로 처리됩니다. 예를 들어 사용자가 'hello Python'을 입력하면 인터프리터는 'Python'을 매개변수로 보내는 클래스의 do_hello() 메서드를 실행하려고 합니다. 해당 메소드가 정의되어 있으면 실행되고, 그렇지 않으면 오류 메시지가 표시됩니다.
Cmd의 하위 클래스는 do_help() 메서드를 상속합니다. 'help hello'와 같은 사용자 입력은 hello() 메소드의 독스트링을 가져와서 도움말 텍스트로 표시하거나, 존재하는 경우 help_hello() 메소드가 실행됩니다.
다음 예제는 라인 지향 인터프리터 프레임워크의 적용을 보여줍니다. 코드는 먼저 cmd 모듈을 가져오고 Cmd 클래스의 하위 클래스를 정의합니다.
MathOps 클래스는 독스트링 텍스트를 사용하여 add, sub, mul 및 div 메서드(모두 do_ 문자가 접두어 있음)를 정의합니다.
MathOps 클래스의 객체는 cmdloop() 메서드를 호출하여 선언되고 루프로 전송됩니다. 사용자가 프롬프트 앞에 help를 입력하면 모든 메소드 이름이 표시됩니다. 도움말이 있는 메소드의 이름을 입력하면 해당 메소드의 독스트링이 표시됩니다. 메서드를 호출하려면 이름, 필수 인수를 입력하고 Enter 키를 누릅니다. 방법의 결과가 표시되고 루프를 중지하기 위해 ^D가 발행될 때까지 프롬프트가 반복적으로 나타납니다.
from cmd import Cmd class MathOps(Cmd): def do_add(self, args): '''add two numbers''' num=args.split() print ('addition:',int(num[0])+int(num[1])) def do_sub(self, args): '''subtract two numbers''' num=args.split() print ('subtraction:',int(num[0])-int(num[1])) def do_mul(self, args): '''multiply two numbers''' num=args.split() print ('multiplication:',int(num[0])*int(num[1])) def do_div(self, args): '''perform division''' num=args.split() print ('division:',int(num[0])/int(num[1])) def do_EOF(self, args): return True op=MathOps() op.prompt= "->" op.cmdloop("loop starts. Press ^D to exit")
위 스크립트의 샘플 실행은 아래와 같습니다.
loop starts. Press ^D to exit ->help Documented commands (type help ): ======================================== add div help mul sub Undocumented commands: ====================== EOF ->help add add two numbers ->add 5 7 addition: 12 ->div 10 5 division: 2.0 -> >>>