我正在尝试执行具有一些选项的程序,并将其作为输入txt文件。所以我试试这个:
set myExecutable [file join $::env(path_to_the_program) bin executable_name]
if { ![file exists $myExecutable ] } {
puts "error"
}
if { ![file executable $myExecutable ] } {
puts "error"
}
set arguments [list -option1 -option2]
set status [catch { exec $myExecutable $arguments $txtFileName } output]
if { $status != 0 } {
puts "output = $output"
}
所以这是打印:
output = Usage: executable_name -option1 -option2 <txt_file_name>
child process exited abnormally
答案 0 :(得分:4)
您实际上没有为可执行文件提供参数。只是textFileName。尝试:
set status [catch {exec $myExecutable -option1 -option2 $txtFileName} output]
或者如果您希望将参数保留在列表中:
set status [catch {exec $myExecutable {*}$arguments} output]
其中{*}语法将导致列表扩展到位。在添加(8.5)之前的Tcl版本中,您将使用:
set status [catch {eval exec [list $myExecutable] $arguments} output]
其中eval命令解包列表,以便exec看到一组参数。在$ myExecutable周围添加额外的[list]语句可以保护它的内容,防止被解释器传递视为列表。