2016-03-29 6 views
0

私はネイティブで使うTCLパッケージをたくさん持っています。 1. sshを、私は今、外部アプリケーションからこれを使用したいTCLパッケージのAPIパターンゲートウェイの例は?

package require foo 
set x [foo::bar blah blah] 
. 
. 
. 

を含むスクリプトファイル名を指定して実行 2.ボックスに。私はTCLの実装の詳細を隠すこれらの上にAPIを公開することを好むでしょう。

どのようにこの問題にアプローチするためのツール/パッケージ/アイデアですか?

よろしく シャラド

答えて

0

だけ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 

あなたが思うほど複雑なことはあなた次第です。

+0

ありがとうございました。これは、外部アプリケーションが同じシステム上で実行され、TCL内にあることを前提としています。私はより明確にすべきだった。お詫び!外部アプリケーションは、TCL以外のマシン上にあっても構いません。また、 'foo :: bar {*} $ argv'と 'dostuff {*} $ argv'について理解してもらえますか?私はそれを得ていない。 – Sharad

関連する問題