从蟒蛇运行TCL脚本参数(Running tcl script from python with a

2019-10-30 14:16发布

我试图从Python的运行TCL脚本,TCL脚本需要命令行参数来执行,当我从源蟒蛇TCL的文件,它就会显示错误说

tclsh.eval('source "test.tcl"' )
_tkinter.TclError: can't read "::argv": no such variable

我已经做了很多的搜索,他们大部分的询问如何传递参数给蟒蛇在TCL。

Python代码

import tkinter
import sys 
tclsh.eval('source "test.tcl"' )
if __name__ == '__main__':
    print("hi")

TCL代码

puts [lindex $::argv 0]

反正对我来说蟒蛇传递参数给TCL?

要么

没有传递参数,仍然编译?

因为如果我编译TCL脚本只不带参数,它仍然编译

注意:

在Tkinter的文档,它说tkinter.Tk是

The Tk class is instantiated without arguments

有没有一种方法与参数实例化?

索尔:

tclsh.eval('set argv [list]')
tclsh.eval('set argc 0')

我试图设置一个全局变量,它的python 3.6为我工作

Answer 1:

全球argv变量是,除了一个标准的Tcl脚本,不以任何方式特殊的启动过程中设置。 你可以因此只是之前将其设置为做source 。 在这种情况下,这样做lappend在一个循环中可能是最好的,因为它建立正确的变量结构。 还有其他两个变量应该被设定为良好( argcargv0 ); 总体你做这样的(作为一个方便的功能):

def run_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')

{{{}}}用Python的str.format在大括号中的单层结果被放在周围的说法,抵御大部分报价的问题。



文章来源: Running tcl script from python with arguments