2016-03-29 15 views
0

Doğal olarak kullandığım bir grup TCL paketim var. kutu 2. Çalıştır Şimdi harici uygulamasından bu kullanmak istiyorumBir TCL paketi için herhangi bir API modeli ağ geçidi örneği?

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

içeren bir senaryo için 1. ssh. Uygulama ayrıntılarını TCL'de saklayan API'ları bunlara ek olarak sunmayı tercih ederim.

Bu soruna nasıl yaklaşılacağı konusunda herhangi bir araç/paket/fikir?

Selamlar Sharad

cevap

0

sadece argv küresel gelen argümanları kopyalamak için harici komut dosyası için bir paketin komutları açığa basit yolu: çok kolay yapılır

package require foo 
puts [foo::bar {*}$argv] 

, ama belli ki sadece eserleri esas olarak sadece argümanlardan bir değer hesaplayan ve döndüren sadece işlevsel komutlardır. API daha karmaşıksa, birkaç komut gerçekleştiren daha uzun bir komut dosyası yazmanız gerekir (örneğin, bir dosyadan girdiyi okuyup, bir tanıtıcıyı komut almak için beslemek, durumu almak için diğer komutları kullanmak ve sonuçları). tutamacı, daha sonra her şeyi yazarak) ve/veya ek argümanlar sağlar (örneğin, çıktıyı varsayılan olarak stdout'a yazması için komutu söyleme). Tüm paketler için çalışan genel bir yaklaşım yoktur.

Bu, Tcllib'deki cmdline paketinin ayrıştırma seçeneklerini daha kolay hale getirebileceğini söyledi. ile adlandırılabilir

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 

ve yardım mesajı gösterir:

% printdata -? 
printdata ?options? Data 
-page value   current page <1> 
-pages value   number of pages <1> 
-help    Print this message 
-?     Print this message 

Örnek Kod: İşte o sayfadan en yararlı örnek

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 

O size kalmış ne kadar karmaşık sen herhalde şeyler yapmak:Ben o zaman böyle bir şey yapacağını tahmin ediyorum.

+0

Teşekkürler Donal. Bu, harici uygulamanın aynı sistemde çalıştığını ve TCL'de olduğunu varsayar. Daha açık olmalıydım. Özür! Harici uygulama farklı bir makinede ve TCL dışı olabilir. Ayrıca, 'foo :: bar {*} $ argv' ve 'dostuff {*} $ argv' öğelerini anlamama yardımcı olabilir misiniz? Anlamadım. – Sharad

İlgili konular