Je veux rediriger la sortie de 1 commande sur une variable, où la sortie est généralement sur stdout. Je gère un outil EDA, qui a TCL Interpeter et ses propres commandes.
Disons que l'outil a une requête TCL, qui dit Je veux avoir un moyen de procéder à ce qui suit: p> idées? p> p>
6 Réponses :
Bien dans pure TCL
set ret [find_transistor m*]
Cela ne fonctionnera pas si "Find_Transistor" écrit son résultat à Stdout. Tout votre exemple fait est sauvegarder tout recherche_transistor code> renvoie, ce qui n'est malheureusement pas ce que la question pose la question.
Vous êtes bien sûr correct - si la commande écrit vraiment sur STDOUT, une approche différente sera requise. Nous avons vraiment besoin de l'expéditeur de la question à revenir et à nous parler!
Je ne suis pas l'initiateur de la question, mais j'ai rencontré le même problème. [] Ne fonctionnera pas pour certaines commandes internes de l'outil EDA et ces commandes impriment des messages à STDOUT. Toute suggestion?
Avant que quiconque ne propose une solution élégante, je partage mon dernier recours: gardez à l'esprit que la sortie de la commande doit être relativement petite. p> p>
Cela ne fonctionne pas dans le TCL ordinaire 8.4. Bien que je suppose que cela corrige le problème de l'adresseur d'origine et de nombreuses personnes qui arrivent ici, car plusieurs outils EDA implémentent Shell comme une redirection de sortie. Un plain TCL s'étoufferait sur test> F1 code> avec
mauvais # args: devrait être "Tester" code> si
proc tester {} {met "hi, là!" } code>
Cela pourrait fonctionner:
redirect -variable ret {find_transistor m*} puts $ret
Eh bien, cela ne fonctionne que pour des outils de la société Synopsys. C'est probablement une bonne réponse à garder, même si cela ne répond pas à la question initiale. Au moins, cela résout probablement le problème pour beaucoup de gens qui arrivent ici. Toutefois, redirection code> n'est pas une commande de TCl ordinaire et ne fonctionne donc pas dans le TCL ordinaire et très improbable dans tout autre outil EDA basé sur TCL.
Si votre application n'a pas de code> rediriger la commande code>, vous pouvez créer votre propre.
Veuillez consulter Ma réponse à plus Question générale de la redirection de TCL ordinaire ? p>
Pour rediriger dans une variable que vous pourriez faire: P>
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 }
La manière la plus simple que j'ai trouvée est EXEC: Set Var [Commande Exec] P>
A fonctionné à merveille pour moi. Devrait être sur le dessus. @Liordagan, est-ce ce que vous cherchez? Je remarque que cette question n'a pas de réponse acceptée ...
J'ai essayé tout mentionné ici. Enfin, c'est celui qui a effectivement fonctionné pour moi: ps: cela a fonctionné dans un outil de cadence. P> p>
Êtes-vous certain que Find_Transistor est imprimée sur stdout ou en supposez-vous que sur la base de votre expérience interactive?