Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将变量从Python脚本传递到tcl shell_Python_Tcl - Fatal编程技术网

将变量从Python脚本传递到tcl shell

将变量从Python脚本传递到tcl shell,python,tcl,Python,Tcl,我是这个论坛的新手,所以我为任何错误提前道歉。我试图将一个变量从python代码传递到tcl脚本。我这样做的方式是: import os import Tkinter from Tkinter import * def set_impairments(port,delay): port=int(port) delay=int(delay) tcl = Tcl() tcl.eval(""" proc my_proc {in_port,in_delay}

我是这个论坛的新手,所以我为任何错误提前道歉。我试图将一个变量从python代码传递到tcl脚本。我这样做的方式是:

import os
import Tkinter
from Tkinter import *

def set_impairments(port,delay):

    port=int(port)
    delay=int(delay)
    tcl = Tcl()
    tcl.eval("""
    proc my_proc {in_port,in_delay} {

    puts in_port
    puts in_delay
    }
    """)
    print port
    print delay

    tcl.eval('my_proc port,delay')

set_impairments(0,25000)
此代码的输出为:

0

25000

in_port

in_delay

如何将in_端口分配到0,将in_延迟分配到25000?我不明白为什么它不能传递变量的值。

Tcl不使用逗号分隔参数,它使用空格。此外,还需要一个
$
来引用变量的值。这样做:

proc my_proc {in_port in_delay} {
    puts $in_port
    puts $in_delay
}
我不是一个真正的巨蟒人,但你可能想

tcl.eval('my_proc {0} {1}'.format(port,delay))

这是的部分副本,但您也可以使用下面的“eval”+格式解决方案,而不是使用Tkinter StringVar。是的,我已经通过了该线程,但它对我没有帮助。显然,我没有抓住要点,因为Glenn建议将$a作为变量值的参考。无论如何,谢谢。你可以编写一个更好的调用,如
tcl.call('my_proc',port,delay)
,它有一点魔力,因此你不需要遍历字符串代表。虽然不适用于所有python变量类型,但int/string可以工作。非常感谢Glenn。这很有帮助。谢谢Schlenk。我一定会看的。