だけargv
グローバルからの引数をコピーしている外部のスクリプトにパッケージのコマンドを公開するための最も簡単な方法:非常に簡単に行うの
package require foo
puts [foo::bar {*}$argv]
が、明らかにのみ作品なぜなら、引数から値を計算して返すだけの本質的な機能コマンドだからです。 APIがより複雑な場合は、いくつかのコマンドを実行するより長いスクリプトを記述する必要があります(例えば、ファイルからの入力の読み取り、コマンドの入力によるハンドルの取得、他のコマンドの使用による状態と結果の取得ハンドルを作成してすべてを書き出します)、および/または余分な引数を与えます(例えば、出力をデフォルトでstdout
に書き込むようコマンドに指示するなど)。すべてのパッケージに共通のアプローチはありません。
つまり、Tcllibのcmdlineパッケージでは、解析オプションがより簡単になる可能性があります。ここでは、そのページから最も有用な例だ:
コード例:と呼ばれるかもしれない
proc printdata args {
array set param [::cmdline::getoptions args {
{page.arg 1 "current page"}
{pages.arg 1 "number of pages"}
} "printdata ?options? Data"]
if {1 != [llength $args]} {
return -code error "No data given"
}
set param(data) [lindex $args 0]
# processing here
parray param
}
:
% printdata -pages 2 -- "--Head data to print--"
param(data) = --Head data to print--
param(page) = 1
param(pages) = 2
とヘルプメッセージを示しています
% printdata -?
printdata ?options? Data
-page value current page <1>
-pages value number of pages <1>
-help Print this message
-? Print this message
私はあなたが次に何かをすると思います。
package require cmdline
package require foo
proc dostuff {args} {
array set param [::cmdline::getoptions args {
{...}
} "foobar ?options?"]
puts [foo::bar -grill $param(fnord) -blah [expr {$param(blub) * 12345}]]
}
dostuff {*}$argv
あなたが思うほど複雑なことはあなた次第です。
ありがとうございました。これは、外部アプリケーションが同じシステム上で実行され、TCL内にあることを前提としています。私はより明確にすべきだった。お詫び!外部アプリケーションは、TCL以外のマシン上にあっても構いません。また、 'foo :: bar {*} $ argv'と 'dostuff {*} $ argv'について理解してもらえますか?私はそれを得ていない。 – Sharad