2012-09-26 26 views
0

我的问题很简单。考虑下面的代码片段:tcl exec with cvs upd:为什么退出?

set cvsPath "C:/Program Files (x86)/cvsnt/cvs.exe" 
puts [exec $::cvsPath log filename] 
puts "------------- END OF SCRIPT ---------------------" 

这一个打印日志,然后“------------- END OF SCRIPT ----------- ----------”。

set cvsPath "C:/Program Files (x86)/cvsnt/cvs.exe" 
puts [exec $::cvsPath -n upd] 
puts "------------- END OF SCRIPT ---------------------" 

这一个打印更新消息并退出。为什么?如何防止退出?

P.S.退出的原因是execcvs -n upd输入...

回答

2

可能是因为你正在让csv.exe抛出一个错误。尝试捕捉它,

set cvsPath "C:/Program Files (x86)/cvsnt/cvs.exe" 
if {[catch {puts [exec $::cvsPath -n upd]} result]} {puts $result} 
puts "------------- END OF SCRIPT ---------------------" 
+0

是的,你是对的。它的工作,但'放$结果'什么都不印。而是最后打印出“------------- END OF SCRIPT ---------------------'。这是什么??? – Narek

+0

尝试查看cvs.exe的文档。无论“-n”本身显然会使其崩溃或抛出错误。 – PherricOxide

+0

找到最简单的方法当然是尝试在命令行上运行'cvs -n upd',看看它说错了什么 – slebetman

0

cvs -qn upd而不是cvs -n upd作品!

及以下工程太:

if {[catch {exec $::cvsPath -n upd} result]} {puts $result} 
puts "------------- END OF SCRIPT ---------------------" 

我应该指出,$结果中包含的更新消息,这仅仅意味着cvs -n upd抛出一个错误。 cvs -qn upd不扔。

+0

在这种情况下,它将'cvs'打印到它的stderr。 (很可能。)如果*消息被写入stderr(没有合适的重定向/标记)*或*如果子进程返回非零退出代码,Tcl的'exec'会产生错误。 –