2010-03-25 3 views
6

elmer позволяет запускать код Python из Tcl. А как насчет другого пути? Может ли кто-нибудь привести пример в Python?Пример для доступа к функциям Tcl из Python

Update: под этим я имею в виду, будучи в состоянии получить доступ к объектам Tcl, вызывать функции Tcl и т.д. вместо просто работает некоторые Tcl кода.

ответ

4

Вы можете взглянуть на стандартный модуль python tkinter, он является связыванием с Tk UI, но это выполняет код Tcl в фоновом режиме.

+1

Например. из Tkinter import *; root = Tk(); root.tk.eval ('puts [array get tcl_platform]'); –

+0

@Colin - поскольку вопрос гласит: «Возможность доступа к объектам Tcl, вызывать функции Tcl и т. Д.», Не следует писать ваш пример, чтобы получить ссылку на этот массив Tcl в Python (вместо получения строкового представления что напечатано)? –

+1

Ну, я просто добавил быстрый комментарий, чтобы дать вам эту идею. Также я подозреваю, что Python <-> Tcl-связь, вероятно, должна быть на уровне передачи команд и получения результатов как строк в любом случае, я бы не ожидал, что они смогут делиться структурами данных. –

-3

Это?

import subprocess 
subprocess.Popen("tclsh someFile.tcl", shell=True) 
+0

Нет, пожалуйста, прочтите разъяснения, которые я только что добавил к вопросу. –

+1

В этом случае нет необходимости использовать оболочку. 'subprocess.Popen ([" tclsh "," someFile.tcl "])' отлично работает. –

1

Хотя это может быть возможно в теории, предоставляя некоторые типы объектов пользовательского Python, что уровень обертки C Tcl_Obj * s прозрачно, в общем случае просто обменивающиеся строки вперед и назад, как EIAS семантика TCL может мерцать прочь каждый внутреннее представление свободно.

Так что да, вы могли бы сделать лучше, чем строки, но его обычно не стоит. У Tkinter уже есть несколько возможных оптимизаций, поэтому попробуйте украсть там ...

7

Это довольно старый поток, но я недавно наткнулся на Tkinter.Tcl(), который дает вам прямой доступ к интерпретатору Tcl в python без необходимо указать TK GUI, поскольку Tkinter.Tk() требует.

Пример ... Предположим, у вас есть файл Tcl (foo.tcl) с прока названием main, который требует одного файла в качестве аргумента ... main возвращает строку, полученную от чтения foo.tcl.

from Tkinter import Tcl 

MYFILE = 'bar.txt' 
tcl = Tcl() 
# Execute proc main from foo.tcl with MYFILE as the arg 
tcl.eval('source foo.tcl') 
tcl_str = tcl.eval('main %s' % MYFILE) 
# Access the contents of a Tcl variable, $tclVar from python 
tcl.eval('set tclVar foobarme') 
tclVar = tcl.eval('return $tclVar') 

Я не нашел еще один способ доступа к объектам Tcl из питона, кроме через возвращаемое значение, но это действительно дает вам возможность взаимодействовать с Tcl проки. Кроме того, вы можете экспортировать функции python в Tcl, как описано в Using Python functions in Tkinter.Tcl()

Смежные вопросы