2010-10-06 19 views
8

1 komutunun çıktısını, OUTPUT'un genellikle STDOUT olduğu bir değişkene yeniden yönlendirmek istiyorum. Ben kendi komutları tcl interpeter & olan bir EDA aracı çalıştırıyorum.tcl komutunun bir değişkene yeniden yönlendirilmesi, tcl sürümü: 8.4

TOOL> set ret redirect {find_transistor m*} 
TOOL> puts $ret 
m1 m2 m3 m4 

Herhangi bir fikir: en alet

TOOL> find_transistor m* 
m1 m2 m3 m4 

aşağıdaki yapmanın bir yolu var istiyorum diyen bir tcl sorgusu sahip olduğunu varsayalım ?

set ret [find_transistor m*] 

saf Tcl

iyi

+0

find_transistor baskılar stdout'a o belirli, ya sen

yapabileceğin bir değişken içine yönlendirmek için Etkileşimli deneyiminize dayanarak var mı? –

cevap

3

muhtemelen ne istediğinizi yapardı. Tcl tutorial'u okumayı deneyin. komutunun çıktısı nispeten küçük olması gerektiği akılda

find_transistor m* > tmp 
set fp [open "tmp" r] 
set file_data [read $fp] 
close $fp 

Bear: herkes zarif bir çözüm ile çıkageldi

+5

"find_transistor" sonucunu stdout'a yazdığında bu işe yaramaz. Bütün örneğiniz, 'find_transistor' ne olursa olsun, ne yazık ki soruyu sormak istemediğimiz şeyi kurtarır. –

+1

Elbette doğru - tabii eğer komut gerçekten STDOUT'a yazıyorsa, farklı bir yaklaşım gerekecektir. Geri gelmek ve bizimle konuşmak için sorunun kaynağına gerçekten ihtiyacımız var! – Jackson

+0

Sorunun kaynağı ben değilim, ama aynı sorunla karşılaştım. [] bazı EDA aracı iç komutları için çalışmayacak ve bu komutlar STDOUT'a mesaj yazdıracaktır. Herhangi bir öneri? – solotim

0

önce benim çirkin son çare paylaşır.

+0

Bu, düz Tcl 8.4'te çalışmaz. Her ne kadar birçok EDA aracı, çıkış yönlendirmesi gibi bir kabuk uyguladığı için, buradaki orjinal asker ve çok sayıda insan için sorunu çözdüğünü kabul etmeme rağmen. Düz Tcl, 'test> f1 '' i yanlış 'args' ile boğardı:" test "olması gerekiyorsa" test edin {} {"Merhaba, orada!" } ' – cfi

4

Bu işe yarayabilecek: Eğer uygulamalarda redirect komutu yoktur

redirect -variable ret {find_transistor m*} 

puts $ret 
+4

Eh, bu sadece şirket Synopsys araçları için çalışır. Muhtemelen orijinal soruya cevap vermese bile, hala iyi bir cevaptır. En azından muhtemelen buraya gelen birçok insan için sorunu çözüyor. Ancak 'yönlendirme' basit bir Tcl komutu değildir ve bu nedenle düz Tcl'de çalışmaz ve diğer Tcl tabanlı EDA araçlarında çok düşüktür. – cfi

2

varsa, kendi oluşturabilirsiniz.

Lütfen daha fazla general question of how to redirect in plain Tcl için my answer'a bir göz atın. Bulduğum

proc redirect_variable {varname cmd} { 
    rename puts ::tcl::orig::puts 

    global __puts_redirect 
    set __puts_redirect {} 

    proc puts args { 
     global __puts_redirect 
     set __puts_redirect [concat $__puts_redirect [lindex $args end]] 
     set args [lreplace $args end end] 
     if {[lsearch -regexp $args {^-nonewline}]<0} { 
      set __puts_redirect "$__puts_redirect\n" 
     } 
     return 
    } 

    uplevel $cmd 

    upvar $varname destination 
    set destination $__puts_redirect 
    unset __puts_redirect 

    rename puts {} 
    rename ::tcl::orig::puts puts 
} 
0

kolay yoludur exec: set VAR [exec KOMUTANLIĞI]

İlgili konular