如何调用TCL程序使用Python(How to Call TCL Procedure using

2019-09-02 06:08发布

使用下面的代码,我可以能够调用在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')

Answer 1:

代替r.tk.eval( '源proc.tcl')

尝试使用os.system(“源proc.tcl”)和进口OS



Answer 2:

而已矣,你是:

>>> 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表达式。 正如我上面的例子。



Answer 3:

我不知道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


Answer 4:

如果你不需要的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

讨论

  • 注1:在TCL脚本,该行eval $argv采取什么样的命令行上执行它。 它不提供错误在所有的检查,因此有可能是危险的。 您将要在执行前检查恶意意图命令行。 我这里是很好的示范目的。

  • 该功能tclcaller.py需要一个命令行,把它分解,并调用proc.tcl做的工作。 它收集的输出并返回给调用者。 此外,示范的目的,我没有包含任何错误检查的。



Answer 5:

使用可以使用r.eval

r.eval('source proc.tcl')
r.eval('sub {0} {1}'.format(a, b))

你应该写在短短的功能proc.tcl .line区段喜欢puts "hello"时,与评估将被执行eval



Answer 6:

import subprocess

r = subprocess.check_output('tclsh proc.tcl', shell=True)


文章来源: How to Call TCL Procedure using Python