如何使用参数从tcl脚本执行python脚本

时间:2017-03-19 16:09:11

标签: python-3.x tcl parameter-passing

我有以下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?

2 个答案:

答案 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

让我知道它是否有效。