2009-06-16 2 views
17

Hier ist die Situation. Die Firma, für die ich arbeite, hat ziemlich viel vorhandenen Tcl-Code, aber einige von ihnen wollen Python benutzen. Es wäre schön, einen Teil des vorhandenen Tcl-Codes wiederverwenden zu können, denn das ist bereits ausgegebenes Geld. Außerdem haben einige der Testgeräte nur Tcl-APIs.Kennen Sie irgendwelche kreativen Möglichkeiten, Python mit Tcl zu verbinden?

Also eine der Möglichkeiten, die ich dachte, war mit dem Subprozess-Modul, um in einige Tcl-Skripte aufzurufen.

  • Ist Subprozess meine beste Wette?
  • Hat jemand dieses ziemlich neue Stück Code verwendet: Plumage? Wenn ja, was ist deine Erfahrung (nicht nur für Tk)?
  • Irgendwelche anderen Möglichkeiten, die ich nicht berücksichtigt habe?

Antwort

19

Ich hoffe, dass Sie dafür bereit sind. Standard Python

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

bearbeiten in Re Kommentar: Pythons tcl-Interpreter ist nicht bekannt, andere installierte tcl-Komponenten. Sie können damit umgehen, indem Sie Erweiterungen auf die übliche Weise zu dem tatsächlich verwendeten tcl python hinzufügen. Hier ist ein Link mit einigen Details

+0

Danke für den Tipp. Wie gut funktioniert das mit anderen Tcl-Bibliotheken, die installiert sind? –

+0

Hmm. Wenn Sie darüber nachdenken, kann der Kommentar darüber, dass andere TCL-Installationen nicht bekannt sind, von den Besonderheiten der Plattform abhängen. Unter Windows binäre Installation mindestens, gibt es keine Option, eine andere TCL zu verwenden.Ich wäre nicht überrascht, wenn ein Build aus der Quelle einen verfügbaren tcl verwenden könnte. – SingleNegationElimination

+0

Danke nochmal TokenMacGuy. Das hilft sehr. Obwohl ich schon länger mit Python arbeite, habe ich noch nie in das Tkinter-Modul geschaut (ich bevorzuge wxPython selbst). Ich dachte nur, es wären reine GUI-Widgets, anstatt Tcl in Python eingebettet. Dieser letzte Link war auch sehr hilfreich. –

0

Ich habe es selbst nicht verwendet, aber SWIG können Sie helfen:

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

+0

Ich denke, das zum Einwickeln von C oder C++ Code mit höheren Sprachen verwendet wird. –

+0

Rechts: man * könnte * mit SWIG eine Lösung konstruieren, aber es ist bei weitem nicht so direkt eine Lösung wie "Import Tkinter" oder die Typcl-ähnlichen Projekte. –

3

Dies kann getan werden.

http://wiki.tcl.tk/13312

specificly am typcl Erweiterung aussehen.

Typcl ist ein bisschen komisch ... Es ist eine eine Erweiterung Tcl zu verwenden von Python. Es ist nicht wirklich CriTcl erfordern und in Standard C

Dieser Code demonstriert Tcl Verwendung als gemeinsam genutzte Bibliothek hätte getan werden können, und in zur Laufzeit Einhaken (Tcl Stubs Architektur macht diese herrlich einfach). Darüber hinaus vermeidet Typcl String-Konvertierungen wo möglich (beide Möglichkeiten).

+0

Interessant. Ich nehme an, das ist für Unix-Systeme und nicht Windows? –

+0

Ja und nein: Ich kenne nur Typcl unter Unix, aber alle Teile sind plattformübergreifend; Es würde mich nicht wundern, wenn eine kleine "Relativierung" der Pfade ausreichen würde, um es unter Windows funktionieren zu lassen. In jedem Fall verweist die bereits erwähnte Wiki-Seite auf andere Varianten dieses Themas, die * unter Windows * ausgeführt wurden. –