如何使变量在TCL中唯一
例如:
exec echo $msgBody - /tmp/Alert_Notify_Work.$$
exec cat /home/hci/Alert.txt -- /tmp/Alert_Notify_Work.$$
这是行不通的;我正在尝试使变量Alert\u Notify\u Work唯一。$$不是有效的Tcl语法,Tcl将在shell看到它之前解析该行。但是有一个Tcl命令来检索pid:pid。我通常依赖于当前时间和pid的唯一性
我假设msgBody是一个Tc
我在创建XML字符串时遇到问题。我只看到消息“无需显示数据”。在我的.tcl文件中,我有:
set strXMLgrafico "<graph caption='Distribucion Normal de Rendimiento Academico' subCaption='(Curso Administracion de Proyectos I)' xAxisName='Promedio' yAxisName='Densidad de Probabilidad' yAxisMaxVal
如何使用Tcl/Tk获得当前窗口的焦点。
我尝试使用focus命令,但它返回一个空字符串
我有多个窗口在同一个愿望会议。每个窗口都有
同一组按钮,但数据不同。我需要找出原因
按下按钮的窗口的路径。不带参数的focus命令返回具有焦点的当前Tk小部件,如果没有Tk小部件具有焦点,则返回空结果。您可以通过启动Tk并打包一些窗口来测试这一点,然后在2000之后使用{puts[focus]}并在2秒内单击窗口
然而!通过绑定button命令并将其自身传递给命令过程,可以更好地实现以下目标:
pack [
在这种情况下,“和[列表]之间的确切区别是什么?为什么最后一种情况下的j值没有替换为以(引号)开头的值?为什么在%设置[list{$j}]案例中,j值没有被替换?关于这一点,我真的很困惑。你可以阅读这篇文章,其中谈到了你在这里提出的问题
基本上,它讨论了Tcl中的分组和不同的替换,我认为这将真正让您理解您所问的问题
在这种情况下,“”和[列表]之间的确切区别是什么
你的问题很模糊。如果你问设置一个[list{$j}]和设置一个“[list{$j}]”之间到底有什么区别,我会说没有区别。在这两种情
我在TCL say中声明一个数组
set JDSU-12-1(key) element
parray JDSU-12-1
我错误地说JDSU不是数组
即使是简单的puts语句也不起作用
% puts $JDSU-12-1(key)
can't read "JDSU": no such variable
有没有办法用连字符声明数组名。我知道uu可以在数组中工作,但不确定连字符是否可以与大多数其他编程语言一样,TCL变量必须是以字母开头的字母数字(A到Z,或)。不允许连字符或破折号(-)作为变量
我正在寻找一种在每个条目之间标记暂停的方法,以便脚本在继续之前检查每个条目
例如,我有一个简单的代码:
for {set i 0} {$i<5} {incr i} {
set x [gets stdin]
if {[string is integer -strict $x]} {
puts "It's OK"
} else {
puts "It's not OK"
}
}
但现在如果我复制/粘贴:
5
dd
kk
55
99
下面是输出:
5
I
我在tcl中尝试了一个程序,将mstate.txt中的id号映射为instit.map.gz中的名称,并将名称打印到另一个名为file.txt的文件中
但问题是如何将fp3声明为全局变量。因为每次调用过程时,file.txt文件都被重写了,这是我不想要的
set fp2 [open mstate.txt r]
set fp3 [open file.txt w]
proc mapping {n} {
set b [lindex $n 0]
set pipeline [open "
我正在尝试编写一个简单的GUI,用于在TCL+Tk中编辑键值对。它基于一个垂直ttk::panedwindow小部件,包含任意数量的水平ttk::panedwindow小部件,每个小部件的左侧有一个ttk::entry,右侧有一个text小部件。在主ttk::panedwindow下方是一个框架,其中包含一些按钮,用于保存和加载文件以及添加新行。这很好,所有的小部件都可以按照我的预期进行缩放,但是当添加更多的行时,它们会被挤压在一起或者拉伸窗口
试图使窗口垂直滚动无法正常工作。不幸的是,Tk对它
在tcl中,我怎么能期望两个结果并返回相同的字符串?比如说,
expect A or B {send C}
您的示例对于更有用的答案来说过于简单,但这可能是最好的方法:
expect -re {(A)|(B)} {send C}
这取决于“A”和“B”实际上是什么。对于您提到的具体情况,只需重复正文:
expect {
A {send C}
B {send C}
}
您还可以编写一个正则表达式(对于这里要查找的单个字符,还可以编写一个glob模式)。但是,如果A、B和sen
当我以后写什么的时候
.win配置-菜单(此处的某些内容)
控制台向我显示消息“无效命令名tk::MenuDup”,因此我无法继续创建任何类型的菜单。我犯了什么错误?对于初学者来说,仅仅从文档中拼凑菜单是相当困难的:需要示例来理解它们是如何工作的。一旦一个人掌握了窍门,他们实际上相当直截了当
我自己不怎么使用菜单,所以我可能忘了在这里提及一些事情。不过我会尽力的。尝试阅读菜单小部件文档,了解可以做什么
基本菜单管理的基本知识
您至少需要一个菜单小部件(如果要从菜单栏中获得级联下拉菜单,则需要几个
我正在尝试使用TCL中的HTTP包通过HTTP下载一个文件。如果给定的URL是正确的,那么一切都正常,但是如果给定的URL是错误的,那么它不会抛出任何错误。现在我的问题是,如何使用TCL验证给定的URL
提前感谢,,
Vijayhttp包不会对大多数故障抛出错误(主机解析除外);您必须使用命令检查它们
(此代码将泄漏令牌;它忽略了http::cleanupcall…完美答案。非常感谢您的快速帮助。
set token [http::geturl $theWrongUrl]
if {[http::
我正在尝试编写一个TCL过程,它允许我包装语句,然后在内部“执行”它们
例如,如果我最初有:
set var $tmp
我想做一些程序:
proc wrapper {command} {
puts "do something here"
puts $command #ie below : write "set var $tmp" to stdout
EXECUTE COMMAND HERE
puts "do something else here"
}
set voi
我试图通过将列表传递给函数来打印列表:
set GPO_regs "0x70034 0x70038 0x7003C 0x70040 0x70044"
proc write_register {$regs $value} {
puts [format "Value to be written at %s register is %s" $regs $value]
}
foreach regs $GPO_regs {write_register $regs 0x0000}
但我得到了一个错误
在Windows Tcl中加载包时,我想将stdout重定向为null。(将“优质Windows音频/视频体验(qWAVE)支持可用”的措辞重定向为空)
他们有没有办法解决这个问题或者有什么想法??非常感谢你
C:\Users\Tester>tclsh
% set ixchariot_installation_dir "C:/Program Files x86)/Ixia/IxChariot"
C:/Program Files (x86)/Ixia/IxChariot
%
我有许多在tcl代码中使用的包要求,如下所示:
package require tlautils 1.0
package require profilemanager
package require tla::log 1.2
package require res_mgr 1.1
package require resource 1.2
package require sysexits
package require utils 1.5
package require testutil 1.0
我试图比较使用if条件
xorg != "t8405" or "t9405" or "t7805" or "t8605" or "t8705"
我想比较一下,如果xorg不等于右侧的所有这些值,那么执行Y。
我正在试图弄清楚,我如何能够更好地进行更智能的比较,或者如何将xorg与一个接一个的值进行比较?
关于我认为中的和ni(非in)运算符是您应该看到的。它们测试列表的成员资格(或非成员资格)。在这种情况下:
if {$xorg ni {"t8405" "t9405" "t7805" "t86
我编写了以下程序,它模拟了Lodash(javascript库)()中的过滤器函数。您可以用3.5基本格式调用它,如示例部分所示。对于后三个调用选项,我想去掉发送-s(速记)的要求。为了做到这一点,我需要区分匿名进程和list/dict/string
我试着查看字符串is,但没有字符串is proc。在这里研究:我发现他们建议info complete,但是在大多数情况下,无论参数类型如何,参数都会通过测试
有人知道可靠的测试方法吗?我知道我可以离开它或更改过程定义,但我正试图尽可能真实地对待L
我正试图找到一种方法来查找列表中第一个和最后一个匹配的单词或正则表达式
比如:
set list "The dog rant to the field by the red house..."
set first [lsearch -regexp $list \[Tt\]he]
($first =0)
set last [lsearch -last -regexp $list \[Tt\]he
($last=7)
由于正则表达式可能非常慢,因此最好只执行一次正则表达式,而不是多次搜索目标行
我正在编写一个GUI,我想用相同的界面和独立的窗口打开多个窗口。但是当我尝试在一个窗口中输入,而另一个窗口显示相同的内容时,我会问,如何使窗口独立?例如:
foreach name {test1 test2} {
namespace eval $name {
variable InputStr
variable wid
proc Display {var} {
variable InputStr
我想要一种方法来限制哪些包可以加载到tcl中。
我不能从路径中删除它们,因为它有一些应该加载的包
有没有一种方法可以在不将包分离到不同目录的情况下处理此问题
另外,是否有一种方法可以向每个正在加载的包添加跟踪?这样我就可以知道哪些包已经加载了
感谢Tcl分几个阶段加载软件包,详细描述如下:
如果您请求一个它还不知道的包,它将调用在package unknown中注册的处理程序,以搜索包路径(具有路径位的各种来源)中的包索引文件(pkgIndex.tcl),这些文件提供可以加载的包的描述符。这些描
我指的是我项目的tcl代码,我不明白它的意思
TCL使用:
if {[Variable 0] } {
return 1
}
请帮忙 命令:
if {[Variable 0] } {
return 1
}
是有条件的。它计算表达式:
如果认为该值为真,则将计算(子)脚本:
表达式[Variable 0]使用参数0调用命令Variable,并使用命令的结果作为表达式的结果。(有多种值可以为true,但“如果是数字,则为非零,或者字符串文字true,on和yes”涵盖了大部分内容。)命
我试图在Tcl/Tk中打开一个简单的文件打开对话框,但每当我运行Tk\u getOpenFile时,我都会出现以下错误:
invalid command name "::tk::dialog::file::"
while executing
"::tk::dialog::file:: open {*}$args"
(procedure "tk_getOpenFile" line 5)
invoked from within
"tk_getOpenFile"
(pr
根据哪个许可证发布
我找不到作者Schelte Bron的联系信息,来源也没有说明许可证-但他在这里有一个帐户,所以我在这里问:)我在BSD 3条款修订许可证下发布代码没有问题。我刚刚将该许可证添加到该项目中。Hi@Schelte Bron您能回答这个问题吗?它似乎是正式未经许可的。需要直接联系遗嘱人,唉…@DonalFellows是的,必须这样做,但我没有找到联系信息,正如我在最初的问题中所说:)
我对TCL 8.6.8源代码tclInt.h中的以下代码有疑问:
4277 #define TclInvalidateStringRep(objPtr) \
4278 if (objPtr->bytes != NULL) { \
4279 if (objPtr->bytes != tclEmptyStringRep) { \
4280 ckfree((char *) objPtr->bytes); \
4281 }
我正在尝试编写一个expect脚本,部分命令将作为不同的用户执行。所以我需要生成一个kuu进程,然后在用户提供密码后向它发送命令。但是如何收集这些命令的输出并将其打印给运行expect脚本的用户呢
谢谢这可以通过使用以下方法来完成:
proc outputUntilPrompt {} {
global expect_out
set prompt "ACT:*>*"
set output ""
while 1 {
我想用Tcl/Tk做一些简单的绘图程序,比如散点图、x-y图、直方图。我使用的是Tcl/Tk 8.5.7。我在Tcler的wiki中发现,很少有选项,例如Tcl/Tk 8.5中不支持的选项+
是否有任何Tcl/Tk接口到gnuplot或任何小部件来完成绘图
请让我知道在Tcl/Tk中绘图例程的选择。Gnuplot确实可以生成Tcl/Tk可以使用的输出。描述如何操作(尽管由于它正在执行动画,因此具有一些额外的复杂性)。以下是一个简化版本:
package require Tk
eval [exec
如何删除tcl过程
一罐
unseta变量
使用interp alias{}myproc{}otherproc覆盖别名
使用名称空间导入-force在另一个名称空间中定义的过程重写该过程
但是,我没有找到一种方法使过程未知。用于删除过程
rename myproc ""
例如:
% proc myproc {} {
puts "hello world"
}
% myproc
hello world
% rename myproc ""
% myproc
invalid comman
对于无法在文件命令(以及其他一些命令)中关闭平铺替换,是否已经或计划执行任何操作?我最近读到的关于这一点的文章是,但编程语言中如此危险的特性肯定不能被忽视?这难道不像让C函数Tcl_TildeSubst()检查全局Tcl变量的存在并基于它进行tide展开那样简单吗
我经常在shell脚本不够用时编写Tcl脚本,很多时候它包括比较、复制、打开、删除和/或重命名文件。在运行脚本之前,我总是使用find检查以波浪号(~)开头的文件名。我很想听听其他Tcl程序员是如何做到这一点的。Background
我正在尝试使用Tcl dict数据结构:
但当我尝试运行脚本时,脚本显示以下错误:
invalid command name "dict"
我相信这是因为我没有包括任何Tcl软件包。使用Tcl dict需要哪些软件包
谢谢套餐需要Tcl 8.5。dict命令是在8.5中添加的。添加这样一行代码将确保您的脚本预先说明其版本要求。包需要Tcl 8.5。dict命令是在8.5中添加的。添加这样一行将确保您的脚本预先说明其版本要求。要么在脚本顶部使用Tcl 8.5 put软件包require Tcl
我想构造一个复杂的变量,让我们看看:
set entry_arg [lindex $argv 1]
set command_to_launch {extrernal_command_tool -option "set var $entry_arg" -other_option}
exec $command_to_lauch
命令启动了,没问题
但是,问题是该工具获取$entry_arg并崩溃。。。这是由于不允许tcl解释de变量的
set command_to_launch {extrerna
我需要将shell中的以下代码更改为tcl。请帮忙
if (` expr $_f : proj_lp_ ` == 8) then
我需要if条件中条件的tcl等价物
谢谢 请参见where is状态:
因此,您的\u f变量包含一个字符串,并且您正在将它与一般的proj\u lp进行比较。结果就是比赛的长度。在tcl代码中,如果{[regexp{^proj_lp}$\u f]}{…},则可以是,因为您只关心它是否匹配。如果{[string match“proj_lp.*”$\u f]}{…},
有没有办法影响ttk::treeview中项目的呈现?例如,我希望在内部将大小存储为以字节为单位的普通数字,但以kB或MB的格式显示它们
到目前为止,我将数据存储了两次,一次作为原始数据存储在字典中,一次以漂亮的打印格式存储在ttk::treeview中,但是这非常难看,因为我需要额外的代码来保持ttk::treeview的同步。项标签和数据值字符串就是呈现的字符串
但是,您可以将原始数据添加到未显示的额外列中(不要在-displaycolumns中列出)
我在linux下将starkit/starpack与tcl8.5和expect 5.44.1.15一起使用,在创建starkit并将expect的目录放在创建的vfs目录的lib目录下并将其包装回starkit文件后,我可以创建starpack文件,在检查我的linux系统上是否一切正常后,我在另一个linux系统上使用此独立文件,但在那里,它不工作,我有以下错误:
couldn't load file "/tmp/tclJ4M144": /lib/libc.so.6: version `GLI
我在桌面上有一个文件test.txt,我想通过代码访问它,并阅读我在下面提到的代码中尝试过的代码,但遇到同样的错误时无法打开文件。没有这样的文件或目录存在。请看一下我的代码:
set filename {C:\Users\E505135\Desktop\test.txt}
set fp [open $filename r]
set file_data [read $fp]
close $fp
set data [split $file_data ","]
foreach line $data {
我是tcl的新用户,只体验了4天的编程脚本
我试图访问消息文件。讲师只介绍了msgcreate、msgget、msgread等msg命令
这是文件的外观:
NK1|1|ELIZABETH POTTER^^^^^^L|MOTHER|RIDLEYTON NURSIN
NK1|1|MARK DAVIES^^^^^^L|CARER|C/- CARA Pty.Ltd.^""^WOODVIL8|C2|||||||||||||||||||||||||||||||
PV1||I|EPIC^^^0014^^084
我有一个Tcl程序,我经常在其中找到以下类型的表达式:
proc func {} {...}
...
lappend arr([set v [func]]) $v
最后一行的意思是
set v [func]
lappend arr($v) $v
这显然有效。我想知道的是:它是偶然工作的,还是Tcl保证传递给lappend的第一个参数在第二个参数之前进行计算?Tcl总是从左到右进行计算,正如您在上所看到的,我引用的部分:
替换从左到右进行,在尝试评估下一个替换之前,将对每个替换进行完全评估。因
我尝试使用tcl包pki::sign。目标是使用tclws使用X509证书对SOAP消息进行签名
解析公钥是正常的:
pki::x509::parse_cert $publickey
但是,解析私钥不起作用
pki::pkcs::parse_key $privatekey
它会导致以下错误:
"Expected Sequence (0x30), but got 42"
证书是作为.p12文件提供给我的。
我可以使用openssl通过以下命令获取公钥和私钥:
公钥:
openssl pk
标签: Tcl
environment-modules
我在模块文件中使用任何预定义的环境变量时遇到问题。例如,像这样的setenv TEST${HOSTNAME}行会抛出一个错误,其中系统将${HOSTNAME}定义为全局环境变量。错误如下:错误:102:Tcl命令执行失败:set TEST${HOSTNAME}。我在模块文件本身中设置了环境变量,并尝试使用这些变量,但得到了相同的错误。比如说,
此不起作用:
setenv DUMMY/location/to/some/file
setenv测试${DUMMY}
我得到了与上面类似的错误:错误:10
我正在编写一个脚本,将内容输出到一个窗口,该窗口由一个Tkhtml小部件和一个文本小部件组成,在ttk::panedwindow中显示在彼此上方。这两个小部件都可以垂直和水平滚动。还有一个按钮允许用户清除文本小部件
我正在运行Ubuntu的笔记本电脑上进行一些开发。窗口管理器允许2x2阵列中的四个桌面工作区,当GUI首次显示时,底部五分之一左右的工作区从我正在使用的工作区流入下面的工作区。为了使窗口足够短以适应屏幕,我不得不到处调整窗口的大小,这让人恼火,所以我想调整它的大小
(我想)我大概知道
在8.6中执行“package require BLT”TCL时,我遇到一个错误
我下载了BLT3.0并将其放在lib目录中,但它仍然不起作用尝试打印“auto_path”变量,并查看此路径中是否有可用的模块。如果没有,请正确设置
lapped auto_path <your_path_to_package_dir>
重叠自动路径
在调用“package require”之前,请尝试打印“auto_path”变量,并查看此路径中是否有可用的模块。如果没有,请正确设置
lapped
我开始在Atom中编写一些Tcl行,但我使用的脚本包无法运行Tcl
有人知道解决我问题的其他软件包或插件吗?您是否考虑过向Tcl提交pull请求?添加对新语言的支持非常简单,只需编辑即可
对Tcl的支持刚刚被合并到atom脚本包中,应该是下一版本的一部分
否则,请查看包和提供程序。或者,该包允许您将自定义构建配置指定为JSON/CSON/YAML
我正在实现Tcl文件系统对象。有人能解释一下什么是挂载点吗。为什么需要它们。如果我的matchInDirectoryProc不会像本机文件系统实现那样返回任何装入点,会发生什么
假设有foo/bar/vfs.myzip,其中vfs.myzip是我正在为其实现文件系统的容器文件。我假设vfs.myzip是一个挂载点。如果类型是TCL\u GLOB\u type\u MOUNT,路径是foo/bar/并且模式是“*”,那么我的实现是否应该返回foo/bar/vfs.myzip。如果模式是“*/*”?
我有以下两个文件:
+file1.txt
1.3.1 abc
1.3.2 def
...
这里有一种方法:
$ tclsh replace.tcl
abc , value x value y
def , value a value b
sharad$ cat file2.txt
abc , value x value y
def , value a value b
$
注意:如果file1.txt和file2.txt很大,这可能不是最佳选择,因为它一次读取所有数据。方法可能会稍微改
我正在从TCL脚本内部启动多个tclsh以模拟多线程。然而,所有的调用都失败了
我已经将问题简化为一个测试,其中TCL进程启动tclsh
proc launch_tcl {} {
set cmd "tclsh script.tcl"
set pid [ eval $cmd & ]
}
这将产生:无效的命令名“tclsh”
我可以在TCL提示符下给出以下几行代码,它们工作得很好
set cmd "tclsh script.tcl"
set pid [ ev
我目前有一个TCL expect脚本,它通过SSH连接到多个设备。Ivee使用for循环在设备中重复
我的问题是,实际密码在纯文本脚本中定义为一个变量。我的所有设备密码都相同,因为我们使用的是TACACS
我想做的是,当我键入密码时,没有标准输出,当我按ENTER键时,它会将其分配给脚本可以使用的变量
以下是我的脚本示例:
set userName "me"
set host "192.168.1.1"
puts "Enter password: "
gets stdin passWord
s
我有这个计划:
#!/usr/local/bin/wish
package require Tk
# Window properties
wm title . "Jau"
wm minsize . 320 240
# main frame
grid [ttk::frame .f -padding "0 0 0 0"] -column 0 -row 0 -sticky nwes
grid columnconfigure . 0 -weight 1; grid rowconfigure . 0
例如,我想将一个按钮按下的值存储到一个变量中,这样我就可以对所有三个按钮都有一个单独的过程,并执行特定于每个变量值的操作,而无需代码重复
button .buttonRed -text "Red" -command "popUpColor"
button .buttonBlue -text "Blue" -command "popUpColor"
button .buttonGreen -text "green" -command "popUpColor"
让处理程序命令获取一个参数:
bu
我尝试创建一个过程,从用户那里获取列表并打印列表的最小值和最大值。
我认为问题在于将列表作为参数传递给过程。
这是我的密码:
proc minmaxlist {mylist} {
lsort -integer $mylist
puts "my list is: $mylist\n"
#puts "the length is $argc\n"
set min [lindex $mylist 0]
set max [lindex $mylist [llengt
假设使用构造:而{[gets$id line]>0}{…}。现在,如果单行大小大于输入缓冲区大小,该怎么办?Tcl将在没有新行接收时缓冲数据,只要内存可用,并且在没有新行时会死机。由于这可能用于DoS攻击,因此引入了chan pending命令。此命令可用于在缓冲数据超过限制时采取措施
注意:chan pending仅在与非阻塞通道一起使用时才有帮助。只要内存可用,Tcl将在未接收换行时缓冲数据,如果没有,则会死机。由于这可能用于DoS攻击,因此引入了chan pending命令。此命令可用于在
亲爱的,我在“data.dat”文件中有以下信息(x y z):
我需要重新填写以下信息:
{24.441 53.481 41.474} {23.920 53.389 42.572}
{23.920 53.389 42.572} {24.470 52.228 42.012}
{24.470 52.228 42.012} {24.875 51.313 42.524}
{24.875 51.313 42.524} {23.663 51.323 42.701}
这适用于大型数据文件。我怎么能在TCL
1 2 3 4 5 6 ...
下一页 最后一页 共 69 页