2009-06-16 9 views
17

Voici la situation. La société pour laquelle je travaille a un peu de code Tcl existant, mais certains d'entre eux veulent commencer à utiliser Python. Il serait bon de pouvoir réutiliser une partie du code Tcl existant, car c'est de l'argent déjà dépensé. De plus, certains équipements de test n'ont que des API Tcl. Donc, l'une des façons dont j'ai pensé à utiliser le module de sous-processus pour appeler dans certains scripts Tcl.Connaissez-vous des méthodes créatives pour interfacer Python avec Tcl?

  • Est-ce que mon sous-processus est mon meilleur pari?
  • Quelqu'un a-t-il utilisé ce nouveau code: Plumage? Si oui, quelle est votre expérience (pas seulement pour Tk)?
  • D'autres façons possibles que je n'ai pas envisagées?

Répondre

19

J'espère que vous êtes prêt pour cela. Python standard

import Tkinter 
tclsh = Tkinter.Tcl() 
tclsh.eval(""" 
    proc unknown args {puts "Hello World!"} 
    }"!dlroW olleH" stup{ sgra nwonknu corp 
""") 

Modifier Re pour commenter: l'interpréteur tcl Python ne connaît pas d'autres composants tcl. Vous pouvez résoudre ce problème en ajoutant des extensions de la manière habituelle au tcl que python utilise réellement. Voici un lien avec quelques détails

+0

Merci pour le conseil. Comment cela fonctionne-t-il avec les autres bibliothèques Tcl installées? –

+0

Hmm. En y repensant, le commentaire à ce sujet ne connaissant pas d'autres installations TCL peut dépendre des particularités de la plate-forme. Sur l'installation binaire de Windows au moins, il n'y a pas d'option pour utiliser un autre TCL.Je ne serais pas surpris si un build de source peut utiliser n'importe quel tcl disponible. – SingleNegationElimination

+0

Merci encore TokenMacGuy. Cela aide beaucoup. Même si j'ai travaillé avec Python pendant un certain temps, je n'ai jamais regardé le module Tkinter (moi-même wxPython). Je pensais juste que c'était de purs widgets GUI, au lieu de Tcl intégré dans Python. Ce dernier lien était très utile aussi. –

0

Je ne l'ai pas utilisé moi-même, mais peut-SWIG vous aider:

http://www.swig.org/Doc1.1/HTML/Tcl.html

+0

Je pense que cela est utilisé pour envelopper le code C ou C++ avec des langages de niveau supérieur. –

+0

À droite: on pourrait * * construire une solution avec SWIG, mais ce n'est pas une solution aussi directe que «importer Tkinter» ou les projets de type Typcl. –

3

Cela peut être fait.

http://wiki.tcl.tk/13312

regarder Specificly à l'extension typcl.

Typcl est un peu bizarre ... C'est une extension à utiliser Tcl de Python. Il ne nécessite pas vraiment CriTcl et aurait pu être fait dans la norme C.

Ce code illustre l'utilisation de Tcl comme bibliothèque partagée, et accrochage dans ce au moment de l'exécution (l'architecture de talons de Tcl rend ce délicieusement simples). En outre, Typcl évite les conversions de chaîne lorsque cela est possible (dans les deux sens).

+0

Intéressant. Je suppose que c'est pour les systèmes Unix, et pas Windows? –

+0

Oui et non: je ne connais que Typcl sous Unix, mais toutes ses parties sont multi-plateformes; cela ne me surprendrait pas si une petite "relativisation" des chemins suffisait à le faire fonctionner sous Windows. Dans tous les cas, la page Wiki déjà mentionnée indique d'autres variantes de ce thème qui ont été exercées sous Windows. –