从Tcl文件执行Makefile时终端不打印执行步骤的问题
解决Tcl中exec执行make不打印步骤的问题
Tcl的exec命令默认会捕获子进程的标准输出(stdout)和标准错误(stderr),不会直接将内容输出到终端,这就是你看不到make执行步骤的原因。哪怕用catch捕获异常,也只是拿到执行结果,不会自动打印子进程的输出内容。
解决方案
给exec命令加上重定向参数,把子进程的输出直接导向当前终端的标准输出和标准错误:
proc buildMirus { } { # 重定向autogrn.sh的输出到终端 exec ./autogrn.sh >@stdout 2>@stderr # 捕获make执行的异常,同时重定向输出到终端 if { [catch { exec make -j 6 >@stdout 2>@stderr } errInfo] } { puts "Error occured while building: $errInfo" } }
说明
>@stdout:将子进程的标准输出重定向到Tcl进程的标准输出(终端)2>@stderr:将子进程的标准错误重定向到Tcl进程的标准错误(终端)- 给
catch加上errInfo参数,可以捕获具体的错误信息,方便排查问题
内容的提问来源于stack exchange,提问作者Ajoy Biswas
相关产品推荐
相关产品推荐

