从Tcl脚本运行外部程序

时间:2013-12-03 09:32:23

标签: tcl

我想根据二进制命令的结果导出变量。我的TCL脚本是这样的:

set A ""

exec sh -c "export A=\"`/usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery -noprompt | grep ^Device | wc -l`\""

puts $A

if { $A == "1" } {
    set CUDA_VISIBLES_DEVICES 0
} else {
    set CUDA_VISIBLES_DEVICES 1
}

使用这个脚本,当我执行puts $A时,我在终端中没有得到任何东西......所以在if命令中我不知道我在评估什么... 我的“导出”必须只返回1或0 ......

抱歉我的TCL水平很差。

感谢。

2 个答案:

答案 0 :(得分:2)

我想你想要的是这样的:

set a [exec /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery -noprompt | grep ^Device | wc -l]

在TCL上下文中设置变量a并将命令的返回值(即输出文本)分配给它。

答案 1 :(得分:0)

问题是你的exec'd命令在它自己的进程中运行,所以当你设置一个变量A时,A只在该进程的生命周期中作为shell变量存在。当流程退出时,A就会消失。

exec命令返回exec'd命令的stdout。如果希望命令的结果在Tcl变量中,则需要将变量设置为exec的结果:

set A [exec ...]

有关exec命令的更多信息,请参阅exec man page