Common Lisp에서 명령 줄 인수를 파싱하고 싶습니다. myscript -a 1 -b 2
을 사용하면 값을 얻을 수 있으며 myscript -xyz
도 작동합니다. 컴파일러간에 이식 할 수있는 방법은 무엇입니까?Common Lisp에서 명령 줄 인수와 플래그를 이식 가능하게 구문 분석하는 방법은 무엇입니까?
3
A
답변
7
unix-options
을 사용해보십시오.
(ql:quickload :unix-options)
(defpackage :test
(:use :cl)
(:import-from :unix-options
:¶meters
:&free
:with-cli-options))
당신은 아마 패키지를 :use
할,하지만 당신은 그것에서 심볼을 가져 선호하는 경우, 약 &free
및 ¶meters
을 잊지 마세요. 라이브러리는 전통적인 getopt
유틸리티와 유사한 getopt
기능을 정의합니다. 그러나 또한 with-cli-options
을 정의합니다. 조금 더 희미합니다.
- 첫 번째 심볼 세트는 옵션, 즉 부재 또는 존재하는 플래그를 정의합니다.
¶meters
다음의 기호는 매개 변수를 정의하며 그 뒤에 값이 와야합니다. 두 옵션이나 매개 변수로 인식되지- 인수는 예를 들어
&free
에 의해 지정된 변수에 바인딩 목록에서 사용할 수 있습니다
여기(in-package :test)
(defun my-program (&rest cli-args)
(with-cli-options (cli-args)
(x y z ¶meters a b &free other)
(list x y z a b other))))
나는 프로그램의 진입 점을 정의 .
(with-cli-options() <bindings> <body>)
을 ... 그리고 옵션은 리스프 구현의 실제 명령 행 인수에서 이식 가져온 것입니다 : 실제 프로그램에서, 당신은 단순히 다음과 같이 비어있는 첫 번째 목록을 남길 수 있습니다. (uiop:command-line-arguments)
을 호출하여 전체 명령 줄을 호출 할 수도 있습니다.이 명령 줄은 더 많은 구현을 지원하고 첫 번째 요소로 프로그램 이름을 포함합니다. 위 함수를 사용하면 파서의 동작을 테스트 할 수 있습니다. 짧은 옵션은 분리 또는 결합 할 수있는 예를 들어 참고 :
(my-program "-xyz" "-a" "2" "-b" "3" "--" "something")
=> (T T T "2" "3" ("something"))
(my-program "-x" "-y" "-z" "-a" "2" "-b" "3" "--" "something")
=> (T T T "2" "3" ("something"))
매개 변수로 선언하지만 실제 값을 제공하지 않는 옵션에 대한주의 (아마도 그들이 나, 경우는 모호) :
(my-program "-a" "-b")
=> (NIL NIL NIL "-b" NIL NIL)
알 수없는 매개 변수에 대한 경고가 있습니다
(ignore-errors (my-program "-w"))
; WARNING: Invalid option: w
=> (NIL NIL NIL NIL NIL NIL)
은 자세한 내용은 문서를 참조하십시오.
관련 문제
- 1. Common-Lisp에서 런타임에 클래스를 이식 가능하게 만드는 방법 CLOS
- 2. Common Lisp에서 날짜를 구문 분석하는 패키지?
- 3. Common Lisp에서 쉼표 쉼표를 해석하는 방법은 무엇입니까?
- 4. Common Lisp에서 실행중인 함수를 바꾸는 방법은 무엇입니까?
- 5. yacc에서 명령 줄 argu 구문을 구문 분석하는 방법은 무엇입니까?
- 6. 번들 된 명령 줄 옵션을 모호하게 구문 분석하는 방법은 무엇입니까?
- 7. 파이썬에서 명령 줄 인수를 구문 분석하는 방법은 무엇입니까?
- 8. Bash에서 명령 줄 인수를 구문 분석하는 가장 좋은 방법은 무엇입니까?
- 9. Common Lisp에서 문자열과 숫자의 핵심 차이점은 무엇입니까?
- 10. (유니 코드) 학위 기호를 정규식으로 이식 가능하게 구문 분석하는 방법은 무엇입니까?
- 11. C에서 명령 줄 인수를 구문 분석하는 방법
- 12. 구문 분석하는 방법 명령 줄 인수
- 13. Common Lisp에서 라이브러리를로드하려면 어떻게해야합니까?
- 14. Common Lisp에서 함수의 범위
- 15. Common Lisp에서 타입 삭제하기
- 16. 플래그를 파이썬 실행 파일로 구문 분석하는 방법은 무엇입니까?
- 17. 사용할 Perl 모듈을 구문 분석하는 명령 줄 인수는 무엇입니까?
- 18. Google 플래그를 알 수없는 명령 줄 플래그를 무시하는 방법?
- 19. Common Lisp에서 인쇄 된 표현이란 무엇입니까?
- 20. Common Lisp에서 lambda의 이름 바꾸기
- 21. Common Lisp에서 경고를 캡처하고 계속하지만
- 22. | 5E | Common Lisp에서 의미가 있습니까?
- 23. Common Lisp에서 독자 매크로 관리
- 24. Mandelbrot Common Lisp에서 구현 설정
- 25. funcall은 Common Lisp에서 어떻게 작동합니까?
- 26. Common Lisp에서 퀴즈를 생성 하시겠습니까?
- 27. Common Lisp에서 HTML 테이블 스크랩하기?
- 28. Common Lisp에서 문자열에 문자 추가
- 29. Common Lisp에서 키워드는 어떻게 작동합니까?
- 30. Common Lisp에서 SQLite의 오류 잡기
감사합니다. 이것은 꽤 멋져 보인다, 나는이 해결책을 들여다 볼 것이다. – MatthewRock
또한이 파일을 실행 파일로 보냄으로써 uiop의'command-line-arguments' 함수를 볼 수도 있습니다. – Baggers
@Baggers Updated, thanks. – coredump