У меня есть несколько функций Python. Давайте назовем их foo
, bar
и baz
. Они принимают переменное число строковых аргументов и делают другие сложные вещи (например, доступ к сети).
Я хочу, чтобы «пользователь» (предположим, он знаком только с Tcl) писал сценарии на Tcl с использованием этих функций.
Вот пример (взятый из Macports ), который может предложить пользователь:
post-configure {
if {[variant_isset universal]} {
set conflags ""
foreach arch ${configure.universal_archs} {
if {${arch} == "i386"} {append conflags "x86 "} else {
if {${arch} == "ppc64"} {append conflags "ppc_64 "} else {
append conflags ${arch} " "
}
}
}
set profiles [exec find ${worksrcpath} -name "*.pro"]
foreach profile ${profiles} {
reinplace -E "s|^(CONFIG\[ \\t].*)|\\1 ${conflags}|" ${profile}
# Cures an isolated case
system "cd ${worksrcpath}/designer && \
${qt_dir}/bin/qmake -spec ${qt_dir}/mkspecs/macx-g++ -macx \
-o Makefile python.pro"
}
}
}
Здесь variant_issset
, reinplace
и т. Д. (Кроме встроенных в Tcl) реализованы как функции Python. if
, foreach
, set
и т. Д. Являются обычными конструкциями Tcl. post-configure
- это функция Python, которая принимает блок кода Tcl, который впоследствии может быть выполнен (что, в свою очередь, в конечном итоге вызовет вышеупомянутые "функции" Python).
Возможно ли это сделать в Python? Если да, то как?
from Tkinter import *; root= Tk(); root.tk.eval('puts [array get tcl_platform]')
- единственная известная мне интеграция, которая явно очень ограничена (не говоря уже о том, что она запускает сервер X11 на Mac).