在网络套接字上配置接收信息的通道:编码似乎很宽容?
我对这个问题的篇幅表示歉意,如果有人告诉我一种更简洁的方式来表达它. 我在编码TCL以在Web插座上接收消息并解码它们时引用了这两个文档:一个来自 mdn 和另一个所以问题)我有点不确定当我未能完全考虑频道本身的正确配置时,我的代码为何会起作用. 这是将响应标头发送到连接升级请求之前的配置. chan configure $sock -encoding iso8859-1 -translation crlf -buffering full 发送后,配置如下;而且我能够在插座上接收和解码传入的消息,所有这些消息最初是在客户端上文本的有效载荷,并在第一个XOR帧中标记为这样.由于没有提供编码,我认为它保留为ISO8859-1. chan configure $sock -buffering full -blocking 0 -translation binary 在与卷曲撇号的问题结合后,我更改了配置,以包含如下所示的-encoding utf-8.在插座
16 2024-04-23
编程技术问答社区
Java 和 TCL 之间的套接字编程
我必须为一个方案编写一个程序,其中Java程序将使用套接字编程与TCL程序进行通信. 我已经成功尝试了TCL和Java的套接字编程.但是,由于我必须将Java程序作为客户端套接字和TCL程序作为服务器,因此我无法成功地做到这一点. 服务器的TCL程序 set svcPort 9999 #Implement the service # This example just writes the info back to the client... proc doService {sock msg} { puts $sock "$msg" } # Handles the input from the client and client shutdown proc svcHandler {sock} { set l [gets $sock] ;# get the client packet puts "The packet from the client
14 2024-04-23
编程技术问答社区
TCL 电子邮件脚本无法在 Activestate TCL 中发送
我在Mac OSX版本的TCL上运行了以下脚本,但是它可以正常运行,但是它挂在Windows 7 Machine上的Activestate TCL上 proc send_simple_message {recipient email_server subject body} { package require smtp package require mime set token [mime::initialize -canonical text/plain -string $body] mime::setheader $token Subject $subject smtp::sendmessage $token \ -ports 587 \ -debug 1\ -user
22 2024-04-22
编程技术问答社区
从 Python 运行 TCL 代码(在现有的 TCL shell 上
简介 我最近开始在Linux下制作旧产品,该产品结合了内置的TCL壳.由于公司的限制,我无法控制"幕后",我可以编写的所有代码都必须在此TCL壳下运行,从而处理产品的预定笨拙的TCL API. 我发现自己想知道几次是否可以将一些Python修补到此设置中,因为在Python中,某些解决方案似乎比TCL更合法.通过修补Python,我的意思是:要么从TCL代码本身调用Python代码(例如,可以使用 elmer 来完成),要么使用产品外部使用Python来包装TCL API(我没有找到"经典"解决方案). 问题 鉴于产品已经具有现有的tcl shell ,我浏览的大多数解决方案(例如 tkinter )不能是用于从Python运行TCL代码.我需要将代码"注入"现有外壳. 解决方案 作为一种解决方案,我考虑在TCL侧抬起一个简单的服务器,该服务器从Python侧运行简单的命令.我写了一个小型演示,它起作用了.这使我能够在Python中为笨拙的TCL AP
80 2024-04-22
编程技术问答社区
执行 tclsh 时需要 shell 吗?
#!/bin/sh # A Tcl comment, whose contents don't matter \ exec tclsh "$0" "$@" 为什么我们应该在这里调用shell(#!/bin/sh). 我们可以直接调用TCLSH(#!/usr/sbin/tclsh).让我们假设TCLSH在Sbin Directoey中. 为什么我们首先打电话给外壳,在外壳中再次调用tclsh解释器. 为什么人们喜欢使用这些(#!/bin/sh,exec tclsh" $ 0"" $@").我们不能执行tclsh direclty? 解决方案 出于一个原因,在某些系统上,您可以牢固地锁定可以在Shebang行中运行的可执行文件.换句话说,它可能拒绝运行/bin中的任何内容.也许,如果您的管理员特别虐待狂,他们可能会试图迫使所有人使用zsh: - ) 其次,这将根据您当前的路径设置运行tclsh.如果您希望不同的用户使用不同版本的TCL运行它,那将是无价的.
10 2024-04-22
编程技术问答社区
Expect 中的后台生成进程
我正在使用期望在我的服务器上启动应用程序: #!/usr/bin/expect set timeout -1 spawn "bin/start-all.sh" expect { -re "Found MongoDB in" { send "y\r"; exp_continue } -re "Found Hadoop in" { send "y\r"; exp_continue } -re "Going to start Hadoop" { interact } } 我可以在脚本运行时的几秒钟内访问服务器上的应用程序,但是一旦结束,应用程序就变得不可用. 我期望在调试模式下运行,并将以下输出延伸到最后: expect: does "vendors area. Do you want to start it? [y/n] y\r\n" (spawn_id exp6) match regular expression "Found MongoD
30 2024-04-22
编程技术问答社区
支持 tkinter 窗口间拖放
我正在尝试帮助我在过去的两天里追求这个"挑战",但到目前为止无法独自解决它,但是我敢肯定,有深刻理解的Python包装和安装过程的人可能会在短时间内解决它. 目前为了获得此扩展工作,您需要执行以下步骤(如下所述):): -- --tcl --tkdnd2.9.2 ... ... 注意 - 如果我在项目的VENV中创建了匹配的tcl/tkdnd2.9.2.2.2 现在 -- --venv --Lib --site-packages --TkinterDnD2 ... ... 现在可以成功运行tkdnd扩展. 您可能可以说这不像安装平均Python库一样. 有问题的事情是,额外的tkdnd2.9.2文件夹必须位于基本解释器的TCL文件夹中. 也许可以在setup.py中使用package
6 2024-04-22
编程技术问答社区
在C程序中反复使用TCL解释器
我希望多次使用C程序多次运行TCL解释器.由于复杂的原因,我需要这是一个纯C程序,而不是作为共享对象嵌入的东西.例如,我希望运行此简单的TCL程序Tryme.tcl,两次: prtstr "Test from tryMe.tcl" PRTSTR是我编写的TCL函数,现在只写了这一点.以下是试图两次解释tryme.tcl程序的C代码. 我像Linux下的这样的程序一样编译下面的程序: $ gcc -c try.c; gcc -o try try.o -ltcl; 并这样运行: $ ./try tryMe.tcl 我得到零输出.我究竟做错了什么?还有重置TCL解释器所需的步骤,以使其每次都是新鲜的. #define _GNU_SOURCE #include #include #include #include int PrintStrObjCmd(Client
6 2024-04-10
编程技术问答社区
找不到符号 "Embeddedrcall_Init"
我正在尝试使用swig在Windows环境中为嵌入式C程序创建DLL文件.我正在使用以下命令: C:\swigwin-3.0.12\Examples\r\Z>swig -c++ -tcl embeddedRCall.i C:\swigwin-3.0.12\Examples\r\Z>gcc -c embeddedRCall.c -I/swigwin-3.0.12/Examples/r/Z C:\swigwin-3.0.12\Examples\r\Z>gcc -c embeddedRCall_wrap.c -I/Tcl/include/tcl8.6 -I/swigwin-3.0.12/Examples/r/Z C:\swigwin-3.0.12\Examples\r\Z>gcc -shared embeddedRCall.o embeddedRCall_wrap.o -o embeddedRCall.dll -L/Tcl/lib -L/R/R-3.3.2/bin/i386 -lR
8 2024-04-10
编程技术问答社区
借助TCL API返回指针的地址
我试图借助TCL API返回指针的地址. 在我的简单功能下方: int simpleTest (Tcl_Interp* interp) { Context ctx; // init context Init(&ctx); // printf("%p\n", &ctx); Tcl_SetObjResult(interp, Tcl_ObjPrintf("%p", &ctx)); return TCL_OK; } 但是我有此消息: 无法用提供的参数格式化"%p" 我相信如何做? 解决方案 取决于您想要实现的目标,以及您的实施方式的可移植程度,至少有两个选择: a)施放到整数类型(理想情况下:uintptr_t)并使用格式指定%#llx. (如@Tom所建议) Tcl_SetObjResult(interp, Tcl_ObjPrintf("%#llx", (uintptr_
18 2024-04-09
编程技术问答社区
alloc: invalid block-Are Tcl_IncrRefCount and Tcl_DecrRefCount thread safe for threaded Tcl / 1 interp per thread?
我们的32位服务器应用程序静态嵌入TCL 8.4.11.在Red Hat Linux 6.5 64位上,我们遇到了崩溃/核心转储.失败看起来像: Alloc:无效块:0xf6f00f58:88 F6 0 在问题的底部,我已经记录了我们看到的两个不同的核心转储. 我们将潜在的根本原因隔离到两个线程之间共享的TCL对象,并同时运行单独的TCL解释器实例.我们认为这是因为TCL对象传递给TCL_INCRREFCOUNT/TCL_DECRREFCOUNT,这些同时执行TCL解释器. tcl_incrrefcount/tcl_decrrefcount线程安全时,当TCL被编译时? TCL解释器实例共享TCL对象?有什么方法可以禁用跨口译员实例共享的TCL对象? TCL版本8.6.3? 中的情况是否更好 (gdb) bt #0 __kernel_vsyscall () at arch/x86/vdso/vdso32/sysenter.S:49 #1 0x001
4 2024-04-09
编程技术问答社区
Tcl和C线程之间的共享变量
我有一个TCL主程序,我想从中创建一个C线程. 然后,我需要在两个线程之间共享信息:C线程的过程经常更新输入/输出. 我看到了解决我问题的两个可能的解决方案:(1)端口TCL的线程共享变量,但我在TCL-C API中没有看到有关它的任何信息. (2)创建TCL-C链接变量,并将其用作C线程创建期间的参数. 后一个想法似乎不起作用.这是C代码: #include /* startRoutine */ static void startRoutine (ClientData clientData) { int *Var; Var= (int *) clientData; int locA=0; int j; int k; while (1) { if (locA=!*Var) { // Modify Tcl-C shared variable locA=2 * *Var; *Var=l
8 2024-04-09
编程技术问答社区
在C程序中使用tcl和tk存根
我需要一个简单的C程序,该程序可以创建TCL解释器,初始化TCL和TK,然后加载给定的TCL/TK脚本.我想使用TCL和TK存根(以确保程序将在具有不同版本的TCL/TK的计算机上运行).我将使用此程序而不是运行愿望(因为我有可移植性问题). #include #include #include #include int AppInit(Tcl_Interp *interp) { if(Tcl_Init(interp) == TCL_ERROR) return TCL_ERROR; if(Tk_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_EvalFile(interp,"myscript.tcl"); return TCL_OK; } int main(int argc, char *argv[]) { Tk_Main(argc, a
12 2024-04-08
编程技术问答社区
我可以使用 pcap 库来接收 ipv6 数据包吗?
我试图将Hping3转换为Hping6. Hping3使用PCAP库接收IPv4数据包.但是我需要接收IPv6数据包. 解决方案 这是可能的. libpcap能够在电线上捕获任何东西. 其他解决方案 使用ETHERTYPE_IPV6示例: static u_int16_t ether_packet(u_char *args, const struct pcap_pkthdr *pkthdr, co nst u_char *p) { struct ether_header *eptr = (struct ether_header*)p; assert(pkthdr->caplen len); assert(pkthdr->caplen >= sizeof(struct ether_header)); return eptr->ether_type; } // This is the callback. assumes e
10 2024-04-08
编程技术问答社区
如何在现有的C语言程序中加装图形用户界面?
我一直在研究一个项目,该项目将旧的Solaris CL程序移植以在Linux上运行,并禁止一些无关的硬件问题,这些问题已经完成.现在,我想要GUI,以便用户可以在各种选项中选择下拉和复选框的各种选项,以及一些文本输入区域的选项,这些选项不受限制,例如文件名. (该程序是运行某些光谱程序并将结果存储为CSV文件的内部工具.它处理所有这些选项,运行扫描仪并处理信息并使用指定的文件名存储;我只希望与CL更好的使用. ) 我唯一看到这样做的事情是pygtk+ gui,带有python bintings for c code(我认为那是事实;那是我的第一个学期,我不太了解! ).这比我现在想进入的要多.是否有一种相对简单的方法可以做到这一点?当我谷歌搜索时,我找到了swig( http://www.swig.org/index.php ) ;这是一个好方法吗? 解决方案 这听起来像是作业它专门设计为易于改造此类包装器,以命令行驱动的C程序.您还可以使用多种其他模式将解释器接口,并且很
10 2024-04-06
编程技术问答社区
Tcl eval命令是否会阻止字节编码?
我知道,在某种动态的,解释的语言中,使用eval可以减慢事物的速度,因为它停止了字节编码. 是在TCL 8.5中如此吗? 谢谢 解决方案 它不能阻止字节码汇编,但无论如何它都可以减慢速度.关键问题是,它可以防止字节码编译器在编译过程中具有访问本地变量表(LVT)的访问,从而迫使变量访问通过哈希查找进行. TCL有一种超快速哈希算法(我们已经对其进行了很多基准测试并尝试了很多选择;它是 非常热代码),但是LVT击败了它,因为这只是一个简单的C阵列查找.字节上路. LVT仅在编译整个过程(或其他类似过程的东西,例如lambda术语或tcloo方法)时才正确知道. ). 现在,我尝试了这种特定情况: eval { # Do stuff in here... } 被完全字节码编译,并且大部分是有效的(除了目前可以观察到但可能不应该的一些奇怪的东西外,我们使用的数量还不值得.在任何其他情况下,在编译器正在运行的地点上都无法确切地知道脚本的事实. 另一方面
10 2024-04-05
编程技术问答社区
动画GIF在TCL/TK按钮窗口小部件中
我有一个TCL/TK应用程序,必须从许可证到期的10天开始通知用户.我想在工具栏右角的按钮中实现动画警告图像,以通知它.有什么方法可以实施吗? 如果不能在按钮中完成,则可以作为正常图像或其他方式做到这一点.任何链接或指导都是非常明显的. n.b.动画图像可以是这样的东西 解决方案 对于我正在编写的软件,一般解决方案是在设定的时间间隔内重新configure标签上的图像.例如, global toggle; set toggle 0; while {!{some condition to make the image stop changing}} { after 3000 { if {$toggle == 0} { set toggle 1; myLabel configure -image onImage; } else { set toggle 0; myLabe
18 2024-04-05
编程技术问答社区
构建Rip时缺少tk.h和tcl.h文件
我正在尝试使用网站当我写" make依赖"时,我会得到错误: 在vripinit.cc:30中包含的文件中:vripinit.h:22:17:错误:tcl.h: 没有这样的文件或目录vripmain.cc:22:16:错误:tk.h:没有这样的文件 或vripmain.cc:28的文件中的目录:vripinit.h:22:17: 错误:tcl.h:未包含的文件中的文件或目录 vripmisccmds.cc:29:vripmisccmds.h:22:17:错误:tcl.h:没有这样的文件 或来自VRIPFILLCMDS.CC的文件中的目录:29: VRIPFILLCMDS.H:22:17:错误:TCL.H:文件中没有此类文件或目录 包括来自vripfilecmds.cc:29:vripfilecmds.h:22:17:错误:tcl.h: 从vripgridcmds.cc:29中包含的文件中没有此类文件或目录: vripgridcmds.h:22:17:错误:tcl.h:文件中没有此类
14 2024-04-05
编程技术问答社区
如何在TCL中检查stdin是否处于等待状态?
考虑以下代码: chan configure stdin -blocking false while { true } { chan gets stdin if { chan blocked stdin } { break } } 在循环的最后一行,chan blocked stdin在任何一种情况下都返回true:当stdin上没有更多输入时,stdin有一些输入时,stdin>以纽线角色结尾.我需要区分这两种情况. 我该怎么做? chan pending input stdin在两种情况下也返回0. 这是使用上述代码的上下文. proc prompt { } { puts -nonewline stdout "MyShell > "; flush stdout } proc evaluate { } \ { chan configure stdin -blocking false while { true } {
10 2024-04-04
编程技术问答社区
如何在TCL检查stdin缓冲区是否为空?
with 有没有办法检查stdin的缓冲区是否为空? 请参阅以下问题:如何检查stdin是否是在tcl? 中 解决方案 显然,您可以将通道模式设置为非障碍物并从中读取.如果读取返回0长度,则没有任何可用.但是,我怀疑您的意思是测试存在的数据,但鉴于您提到了那里的线条缓冲,但不是一条完整的行. Fblocked命令对此进行了测试.请参阅 fblocked(1)有关详细信息频道这使您知道存在不完整的线. 阅读stdin时的另一个有用的命令,如果您正在阅读交互式脚本命令,则是使用Info Complete命令.这样您就可以累积行直至信息完成返回true,然后评估整个缓冲区. 其他解决方案 您可以使用chan pending input stdin检查TCL的输入缓冲区(需要至少TCL 8.5).但这并不表示该操作系统是否在缓冲区中有任何东西.通过尝试读取数据(gets或read)或的脚本,当至少一个字节时,通过使用触发可读fileevent的脚本来检查这些内容. (嗯
10 2024-04-04
编程技术问答社区