2015-09-04 1 views
2

Я имею Win 7 машина и TCL установлена ​​с downloads.activestate.com/ActiveTCL/releases/8.6.4.1/ActiveTcl8.6.4.1.299124-win32-x86_64-threaded.exe
Я использую TCL пакет fileutil успешно, как:не может найти пакет fileutil в TCL (как установить его для третьей стороны TCL интерпретатора)

proc foo{} { 
# some code 
    package require fileutil 
    # able to use ::fileutil::updateInPlace in code 
} 

foo 

Это делается с помощью скрипта на

C:/SVN/code/changeFile.tcl

Теперь я использую тот же код как часть большего сценария как

proc foo{} { 
    # some code 
     package require fileutil 
    # some code using the package 

    } 

# more code 
cd "C:/SVN/code" 
foo 
#more code 
cd "C:/Program Files (x86)/Target Compiler Technologies/adsp2-12R2/designs/adsp2/ISS" 

Это часть сценария называется audio_sim.tcl и вызывается следующими командами на скорлупе

cd "C:/Program Files (x86)/Target Compiler Technologies/adsp2-12R2/designs/adsp2/ISS" adsp2_ia.exe -T -t "C:/SVN/code/audio_sim.tcl"

Это теперь дает ошибку:

can't find package fileutil

Почему жалуется теперь, когда это похоже на то, что я сделал в первом случае?

+0

В первом случае сценарий выполняется по tclsh.exe (или tclsh86.exe), который поставляется с ActiveTcl. Во втором случае он выполняется с помощью adsp2_ia.exe, который является сторонней программой, которая имеет встроенный интерпретатор tcl. Вот почему он не может найти пакет. Tcl немного уникален в этом смысле, потому что, в отличие от Perl или Ruby, вы часто находите его в качестве скриптового языка в другой программе. Очень похоже на javascript. Это похоже на запись javascript-кода для Firefox, который не будет запускаться в IE. У меня нет такого решения, поэтому я размещаю это как комментарий. – slebetman

+0

@slebetman, поэтому, я думаю, мне нужно найти способ установить этот пакет для стороннего интерпретатора – user915783

+0

Если пакет является чистым tcl-кодом, вы можете просто искать файл, который реализует пакет, источник, который требуется пакет. – slebetman

ответ

2

Как писал slebetman, adsp2_ia.exe, вероятно, не может найти файлы библиотеки ActiveTcl, но вы можете сами импортировать пакет. В моей установке 8.6.1 файл находится в C:\Tcl\lib\teapot\package\tcl\teapot\tcl8\8.2\fileutil-1.14.8.tm. Ваше местоположение или номер версии могут отличаться, но обратите внимание, что вы ищете файл .tm. Он не будет в любом каталоге с именем fileutil, это для связанных пакетов.

(Еще один указатель лебедмана :) Возможно, можно сделать модуль видимым, вызвав ::tcl::tm::path add с указанием пути в качестве аргумента.

Если нет, используйте код source, чтобы импортировать код. Сделайте вызов в глобальной области, вне любой процедуры.

Тогда вы должны позвонить в package require fileutil.

Документация: package, source, tm

+0

Для файлов .tm лучше использовать tcl :: tm :: path add' вместо источника. То есть, если интерпретатор поддерживает его. Для более старых интерпретаторов (очень вероятно) вам нужно будет его исправить. – slebetman

+0

@slebetman: да. Я думал, что предложение источника 'упростит и с большей вероятностью будет работать в нестандартном интерпретаторе, но, конечно, следует упомянуть ':: tcl :: tm :: path add' для полноты. Благодарю. –

+0

@PeterLewerin и slebetman Спасибо, ребята .. ты был спасителем. Я нашел местоположение и сделал _source_ после _ :: tcl :: tm :: path add_, и он отлично работает. – user915783

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