I am new to this forum, so I apologize beforehand for any mistakes. I am trying to pass a variable from my python code to tcl script. The way I am doing this is:
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)
The output of this code is:
0
25000
in_port
in_delay
How to assign in_port to 0 and in_delay to 25000? I am not able to understand why it is not able to pass the value of the variable.
femtoRgon
33.4k7 gold badges67 silver badges90 bronze badges
-
This is partially a duplicate of stackoverflow.com/questions/25288972/… but you can also use the 'eval' + format solution below instead of using a Tkinter StringVar.schlenk– schlenk2015年12月22日 20:24:35 +00:00Commented Dec 22, 2015 at 20:24
-
Yeah I have gone through that thread and it didn't help me. Apparently I was missing the point as Glenn suggested to put a $ to reference the value of the variable. Anyway Thanks.wolf123– wolf1232015年12月23日 16:46:42 +00:00Commented Dec 23, 2015 at 16:46
1 Answer 1
Tcl doesn't use commas to separate arguments, it uses whitespace. Also, you need a $ to reference the value of the variable. Do this:
proc my_proc {in_port in_delay} {
puts $in_port
puts $in_delay
}
I'm not really a python guy, but you probably want
tcl.eval('my_proc {0} {1}'.format(port,delay))
answered Dec 22, 2015 at 19:48
glenn jackman
249k42 gold badges233 silver badges363 bronze badges
Sign up to request clarification or add additional context in comments.
3 Comments
schlenk
One can write the call a bit nicer as
tcl.call('my_proc', port, delay) which has a bit of magic so you do not need to move through the string rep. Does not work for all python variable types though, but int / string works.wolf123
Thank you so much Glenn.This helped.
wolf123
Thank You Schlenk. I will definitely look at it.
lang-py