Изменить версию Tcl при импорте tkinter в Python
Я использую import tkinter
выполнять Tcl
скрипт.
Такие как:
import tkinter
runTCL = tkinter.Tk()
runTCL.tk.eval('puts [info tclversion]')
По умолчанию Tcl
lib установлен в моем Python3.5
является Tcl8.6
,
Я собираюсь получить доступ к IXIA и автоматически настроить его по сценарию.
Проблема заключается в API, предоставляемых моим IXIA (с IxOS4.10
) могут быть доступны только Tcl8.4
lib, новые версии недопустимы.
Я знал, что это может быть легко в Unix-подобной системе, используя ./configure --with-tcltk-libs
и что-то в этом роде.
Но как я мог восстановить свой Python3.5
с Tcl8.4
Либ, когда я import tkinter
на моем Windows-64bit
машина?
Заранее спасибо.
1 ответ
Самым простым способом может быть запуск кода для доступа к IXIA в качестве подпроцесса, чтобы он мог использовать Tcl 8.4, не нарушая версию, используемую Python (что будет иметь много других последствий). Теперь Tcl 8.4 больше не поддерживается, но самая последняя версия Tcl - 8.4.20 и вышла всего несколько лет назад, поэтому она в значительной степени совместима с существующими системами сборки. (Вы можете получить исходный код 8.4.20 от SourceForge.)
Когда вы создаете Tcl, предполагая, что вы ориентируетесь на Unix, вы можете настроить, где он будет установлен, используя --prefix=
возможность configure
; расположение по умолчанию /usr/local
(например, tclsh8.4
двоичный код входит в /usr/local/bin
библиотеки поддержки идут в /usr/local/lib
документация идет в /usr/local/man
…) Если у вас есть пакеты Tcl в другом месте, которые вы хотите использовать, TCLLIBPATH
Переменная окружения может использоваться, чтобы сказать, где они находятся. Кроме того, если вы работаете как подпроцесс, вы можете настроить уровень буферизации, используемый для стандартного вывода:
# The default with terminals is line. The default with pipes is full.
fconfigure stdout -buffering line
В общем, вы, вероятно, будете заменять runTCL.tk.eval
в вашем коде Python для печати кода для запуска в канал подпроцесса и чтения результата обратно. Потребуется немного работы, чтобы сделать это аккуратно, но об этом уже говорилось в других вопросах. Единственным серьезным осложнением является то, что вы работаете с неподдерживаемой версией кода для вашего подпроцесса.