我有以下tcl脚本:
puts "The total number of arguments is $argc"
if {$argc > 0} {puts "The arguments in ARGV are: $argv" }
exec python $argv/../scripts/sim/sim_comp_gen.py
我如何执行python脚本并将其传递给$ argv?
答案 0 :(得分:1)
{*}
语法是关键所在:
exec python ../scripts/sim/sim_comp_gen.py {*}$argv
如果您使用相对于脚本名称的内容,那就在$argv0
中,并且Tcl有一些内置实用程序可以让它更容易:
set script [file join [file dirname $argv0] scripts/sim/sim_comp_gen.py]
exec python $script {*}$argv
您可能在Windows上需要file nativename
。 (我不记得python是否执行斜杠类型忽略/转换。)
set script [file join [file dirname $argv0] scripts/sim/sim_comp_gen.py]
exec python [file nativename $script] {*}$argv
在一个不支持{*}
的旧版Tcl上?仔细使用eval
...
set script [file join [file dirname $argv0] scripts/sim/sim_comp_gen.py]
eval [list exec python $script] $argv
关键是使用list
去除东西。即使你有像文件名中的空格这样棘手的东西,这也行得正常。
答案 1 :(得分:1)
Donal的解决方案是最好的。 你也可以在下面试试。
exec echo "python_script_name.py argument1 argument2" > ./tempfile
exec chmod +x ./tempfile
exec ./tempfile
让我知道它是否有效。