今天写tcl脚本的时候遇到了一个问题,记录一下。
代码的目的是需要寻找某文件夹下的所有elf文件,然后作为输入传入python中。
最开始用的是这段代码:
set input_elf [glob "stims/*.elf"]
exec python utils_elf_parser.py -i $input_elf -o map.txt
这段代码有一个bug,python文件中,input文件会被处理多次,list中有几个元素就会被处理几次,但当直接在脚本中把 $input_elf
的内容写在-i
后面,结果就是正确的。除此之外,使用[join $input_elf " "]
或者将该列表转为字符串都是无用的。
分析后认为,这是由于$input_elf
在这里是列表,而直接把 $input_elf
的内容写在-i
后面这种做法,后面的内容会被当做独立参数,这两者的不同导致了问题。
最后的解决方法是使用eval
关键词,将整个命令都转为字符,并用eval
执行
set input_elf [glob "stims/*.elf"]
set gmap_command "exec python utils_elf_parser.py -i $input_elf -o map.txt"
eval $gmap_command
这种方法得到了正确的结果,尽管eval
的方法不被推荐,但目前没有找到更好的解决方法。尝试了{*}$input_elf
扩展符,但似乎此扩展符只对tcl的process有效,对执行python不适用。