运行 来自 python 的带参数的 tcl 脚本
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
下对我有用
全局 argv
变量,除了在标准 Tcl 脚本启动期间设置外,没有任何特殊之处。因此,您可以在执行 source
之前设置它。在这种情况下,在循环中使用 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
导致 单层 括号围绕参数,防御 最 引用问题。
我正在尝试 运行 来自 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
下对我有用 全局 argv
变量,除了在标准 Tcl 脚本启动期间设置外,没有任何特殊之处。因此,您可以在执行 source
之前设置它。在这种情况下,在循环中使用 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
导致 单层 括号围绕参数,防御 最 引用问题。