【发布时间】:2013-01-15 16:59:15
【问题描述】:
我需要在 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')
这会给你一些想法!
谢谢,
【问题讨论】:
-
你确定 tcl-code 是独立运行的吗?试试
tclsh tcltest.tcl错误似乎来自 tcl,所以你的 tcl 周围的 python 可能只会让你更难理解潜在的问题。 -
是的,我运行了几次脚本,它工作正常。问题出在python无法识别!
-
我在这里添加了另一个问题的答案:stackoverflow.com/a/61623719/5626983