使用下面的代码,我可以能够调用在Proc.tcl文件中的所有程序,但我想打电话给个别像总和或子的特效,请让我知道任何其他可能性叫它
我的proc文件的程序,
puts "hello"
proc sum {a b} {
set c [expr $a + $b]
puts "Addition: $c "
}
proc sub {a b} {
set c [expr $a - $b]
puts "Substraction: $c "
}
我的主要文件的程序,
import Tkinter
import os
r=Tkinter.Tk()
r.tk.eval('source proc.tcl')
代替r.tk.eval( '源proc.tcl')
尝试使用os.system(“源proc.tcl”)和进口OS
而已矣,你是:
>>> import Tkinter
>>> r = Tkinter.Tk()
>>> r.tk.eval('proc sum {a b} {set c [expr {$a + $b}]; puts "Sum $c"; return $c}')
''
>>> r.tk.eval('sum 2 5')
Sum 7
'7'
所以你的情况,已经采购了TCL文件,你可以做r.tk.eval("sum 5 5")
来调用该程序。
注意:始终支撑装置,TCL EXPR表达式。 正如我上面的例子。
我不知道TCL,但是这看起来合乎逻辑的:
import tkinter
r=tkinter.Tk()
r.tk.eval('source proc.tcl')
r.tk.eval('sum 1 2')
r.tk.eval('sub 1 2')
>>> hello
>>> Addition: 3
>>> Substraction: -1
如果你不需要的Tkinter的力量,你可以重组proc.tcl一点,并调用proc
通过subprocess
:
proc.tcl:
proc sum {a b} {
set c [expr $a + $b]
puts "Addition: $c "
}
proc sub {a b} {
set c [expr $a - $b]
puts "Substraction: $c "
}
eval $argv; # NOTE 1
caller.py:
import subprocess
import shlex
def tcl(command):
command_line = shlex.split(command)
output = subprocess.check_output(command_line)
return output
print tcl('tclsh proc.tcl sum 5 8')
print tcl('tclsh proc.tcl sub 19 8')
caller.py的输出:
增加:13
减法:11
讨论
使用可以使用r.eval
:
r.eval('source proc.tcl')
r.eval('sub {0} {1}'.format(a, b))
你应该写在短短的功能proc.tcl
.line区段喜欢puts "hello"
时,与评估将被执行eval
。
import subprocess
r = subprocess.check_output('tclsh proc.tcl', shell=True)