Skip to content Skip to sidebar Skip to footer

Running Tcl Script From Python With Arguments

I'm trying to run tcl script from python, tcl script requires command line arguments to execute, when I source the tcl file from python, it then shows the error says tclsh.eval('s

Solution 1:

The global argv variable is, apart from being set during the startup of a standard Tcl script, not special in any way. You can therefore just set it prior to doing source. In this case, doing so with lappend in a loop is probably best as it builds the structure of the variable correctly. There are two other variables that ought to be set as well (argc and argv0); overall you do it like this (as a convenient function):

defrun_tcl_script(script_name, *args):
    tclsh.eval('set argv0 {{{}}}'.format(script_name))
    tclsh.eval('set argv {}; set argc 0')
    for a in args:
        tclsh.eval('lappend argv {{{}}}; incr argc'.format(a))
    tclsh.eval('source $argv0')

The {{{}}} with Python's str.format results in a single layer of braces being put around the argument, defending against most quoting issues.

Post a Comment for "Running Tcl Script From Python With Arguments"