TCL 解析外部调用的参数列表

TCL parsing a list of arguments to an external call

我正在尝试通过 aldec riviera-pro

执行对 python 脚本的调用

我的调用是 python $python_app_name $python_app_args 但是我的 $python_app_args 作为单个字符串而不是多个字符串传递,导致 python 应用程序仅将其视为一个参数并且执行失败.

我试过我认为所有方法都以各种方式传递它,但结果相同。 我真的需要将每个参数放入一个变量中才能工作吗?

我也尝试过使用数组,但我一直收到

can't set "python_string_args(0)": variable isn't array

我的数组赋值代码如下

set python_string_args(0) "-gr"
set python_string_args(1) "-l"
set python_string_args(2) "-r sim"
set python_string_args(3) "-t config_arc_cnt_acc.cfg"

IE 我有解决方法 fx 我可以将它们分配给每个自己的值,或者我可以让 python 应用程序根据参数知识将字符串拆分成它的组件。

注意 riviera-pro中的python命令调用安装在python/python34中的外部python程序,这与我从命令行执行脚本时的情况相同。

不知道你系统中的Tcl解释器是不是最新的。如果是,您应该可以使用

python $python_app_name {*}$python_app_args

将参数作为单独的字符串获取。 {*} 前缀是一个句法修饰符,它将列表中的项目拼接为单独的参数。示例:

list a {b c d} e
# -> {a {b c d} e}
list a {*}{b c d} e
# -> {a b c d e}

文档位于 Tcl 语法的手册页中,link 下面。

在旧版本中,这可能有效:

eval python $python_app_name $python_app_args

但这可能会对参数进行不希望的调整。尝试打印

puts [concat python $python_app_name $python_app_args]

看看这是否是一个合理的命令行。

您将无法将数组作为值传递,数组不能那样工作。

文档:concat, eval, list, puts, {*}