我需要在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')
会给你一些想法!
感谢,
答案 0 :(得分:1)
使用不属于供应商安装的自定义程序包,您需要指示Tcl从哪里搜索它。为此,请将包含该包的目录的父目录附加到Tcl的全局auto_path
变量。例如,如果XXX包位于目录/home/amir/.tclpackages/XXX1.0
中,那么您的脚本将执行此操作:
lappend auto_path /home/amir/.tclpackages
这可以在package require XXX
之前的Tcl脚本中的任何位置。 (好吧,你可以把它放在后面,但package require
会失败......)