[英]Running tcl script from python with arguments
我正在尝试从python运行tcl脚本,tcl脚本需要执行命令行参数,当我从python中获取tcl文件时,它随后显示错误提示
tclsh.eval('source "test.tcl"' )
_tkinter.TclError: can't read "::argv": no such variable
我已经做过很多搜索,其中大多数都问如何在tcl中将参数传递给python。
python代码
import tkinter
import sys
tclsh.eval('source "test.tcl"' )
if __name__ == '__main__':
print("hi")
tcl代码
puts [lindex $::argv 0]
反正我有将python参数传递给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下对我有用
除了在标准Tcl脚本启动期间设置之外,全局argv
变量在任何方面都不是特殊的。 因此,您可以在执行source
之前进行设置。 在这种情况下, lappend
在循环中使用lappend
这样做,因为它可以正确构建变量的结构。 还应该设置另外两个变量( argc
和argv0
)。 总体来说,您可以这样做(作为一项便捷功能):
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
的{{{}}}
导致将单括号括在参数周围,以防止大多数引用问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.