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>)
...とオプションは、あなたのLispの実装の実際のコマンドライン引数からポータブルにフェッチされます。 (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. LispコードをClojure(PAIP)に移植する
- 5. コマンドライン引数を解析する
- 6. コマンドライン引数/ argvを解析する
- 7. Pythonのargparseでこのコマンドライン引数を解析するには?
- 8. Common Lispの "functorの不正な引数"とは何ですか?
- 9. 無効なHTMLを解析するためのCommon Lispパッケージ?
- 10. Haskellでのコマンドライン引数の解析
- 11. パケットドリルテストは移植可能ですか?
- 12. asciiテキストアートは移植可能ですか?
- 13. Golangバイナリは移植可能ですか?
- 14. Common Lisp let関数
- 15. Common Lisp Unbound変数
- 16. getoptを使わずにcでコマンドライン引数を解析するには?
- 17. Pythonのコマンドライン引数の解析
- 18. コマンドライン引数と応答ファイルを解析する
- 19. Dockerでデータストアを移植可能にする方法は?
- 20. 移植可能なEclipse
- 21. 移植可能なPHPデバッグ
- 22. 移植可能なクラスライブラリにスレッドを作成するには?
- 23. Djangoサーバーを移植可能にするには?
- 24. numpyを移植可能なPython 3.6にインポートするには?
- 25. boost :: program_optionsでLPTSTR *コマンドライン引数を解析する
- 26. コマンドライン引数をスペースなしで解析する
- 27. boost.program_optionsでコマンドライン引数を解析する - C++
- 28. 移植可能なEclipseとGoogleプラグイン
- 29. Common LispでIntel x86-64用のLinuxカーネルモードデバッガを作成することは可能ですか?またCommon Lispの実装では?
- 30. Common LispでHTTPクッキーを読むには?
ありがとうございました。これはかなりいいようです、私はこの解決策を検討します。 – MatthewRock
また、これを実行可能ファイルとして出荷する予定がある場合は、uiopの 'command-line-arguments'関数を参照することもできます。 – Baggers
@Baggers Updated、thanks。 – coredump