问题 如何获得TCL exec命令的结果(标准输出)?


假设我有一个这样的TCL脚本:

exec ls -l 

现在这将打印出当前目录的内容。我需要将该输出作为字符串并解析它。我怎么能这样做?


9047
2017-09-26 15:55


起源



答案:


exec 返回输出,只需设置一个变量:

set result [exec ls -l]

你可能想把它包装成一个 catch 然而:

if {[catch {exec ls -l} result] == 0} { 
    # ...
} else { 
    # ... (error)
} 

11
2017-09-26 16:19



是的,可能我的问题是另一个问题。我实际上称之为: set cvsPath "C:/Program Files (x86)/cvsnt/cvs.exe"; exec $::cvsPath -n upd; puts "DONE",以及之后 exec没有消息“完成”。接缝它会退出,但为什么呢? - Narek
我该如何防止退出? - Narek
出了点问题 cvs upd 命令。例如 cvs log filename 工作正常。 - Narek
如果csv命令返回错误,请尝试将exec调用置于try中。试试{exec $ :: cvsPath -n upd}; - PherricOxide
也, 特别是对于ls 你可能想避免为这种事情运行子进程。它显示的所有信息都可以直接在Tcl via中获得 glob 和 file stat... - Donal Fellows


答案:


exec 返回输出,只需设置一个变量:

set result [exec ls -l]

你可能想把它包装成一个 catch 然而:

if {[catch {exec ls -l} result] == 0} { 
    # ...
} else { 
    # ... (error)
} 

11
2017-09-26 16:19



是的,可能我的问题是另一个问题。我实际上称之为: set cvsPath "C:/Program Files (x86)/cvsnt/cvs.exe"; exec $::cvsPath -n upd; puts "DONE",以及之后 exec没有消息“完成”。接缝它会退出,但为什么呢? - Narek
我该如何防止退出? - Narek
出了点问题 cvs upd 命令。例如 cvs log filename 工作正常。 - Narek
如果csv命令返回错误,请尝试将exec调用置于try中。试试{exec $ :: cvsPath -n upd}; - PherricOxide
也, 特别是对于ls 你可能想避免为这种事情运行子进程。它显示的所有信息都可以直接在Tcl via中获得 glob 和 file stat... - Donal Fellows