我需要在python中运行TCL脚本,我的TCL脚本也有一个用户定义的(内部)包

时间:2013-01-15 16:59:16

标签: python tcl

我需要在python中运行TCL脚本,我的TCL脚本也有一个用户定义的(内部)包 我试过这些脚本:

1

import Tkinter
import socket

def TCLRun():
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.connect(('127.0.0.1', 5006))
 root = Tkinter.Tk()
## root.tk.eval('package require XXX')
 tcl_script ="""
package require XXX
set YYY [COMMAND FROM PACKAGE]
puts $YYY 
} """
 # call the Tkinter tcl interpreter
 root.tk.call('eval', tcl_script)
 root.mainloop()

出现此错误:

import TCLCall
>>> TCLCall.TCLRun()

    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        TCLCall.TCLRun()
      File "C:\Users\XXX\Desktop\PKT\TCLCall.py", line 24, in TCLRun
        root.tk.call('eval', tcl_script)
    TclError: can not find channel named "stdout"

2

import Tkinter
root=Tkinter.Tk()
root.tk.eval('package require XXX')
root.tk.eval('set YYY COMMAND')

返回有关sdtout的错误!

另一个:

第3

 import subprocess
    p = subprocess.Popen(
        "tclsh tcltest.tcl",
        shell=True,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
    stdout, stderr = p.communicate()
    print stdout
    print stderr

返回以下错误:

can't find package __teapot__

    while executing

"package require __teapot__"

他们都没有工作,请帮我解决这个问题!

我可以使用以下代码在我们的产品上运行某些操作的命令:

import socket
import time

def Sckt():
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.connect(('127.0.0.1', 5006))

 s.send('0 COMMAND \r\n')

会给你一些想法!

感谢,

1 个答案:

答案 0 :(得分:1)

使用不属于供应商安装的自定义程序包,您需要指示Tcl从哪里搜索它。为此,请将包含该包的目录的目录附加到Tcl的全局auto_path变量。例如,如果XXX包位于目录/home/amir/.tclpackages/XXX1.0中,那么您的脚本将执行此操作:

lappend auto_path /home/amir/.tclpackages

这可以在package require XXX之前的Tcl脚本中的任何位置。 (好吧,你可以把它放在后面,但package require会失败......)