使用重定向在tcl中执行程序

时间:2013-06-09 14:40:15

标签: tcl

在tcl程序中,我试图执行一个使用<

获取输入的程序
puts [exec "./program < inputfile"]

然而,这会产生错误

couldn't execute "./program < inputfile": no such file or directory

有没有办法在tcl中这样做?

2 个答案:

答案 0 :(得分:4)

Tcl可以自己处理重定向,所以你会写:

puts [exec ./program <inputfile]

否则,它会尝试将整个事物解释为单个(有些奇怪的)文件名;合法(在Unix上,而不是在Windows上)但不是你想要的。

或者,你可以通过系统shell解决整个问题:

puts [exec /bin/sh -c "./program < inputfile"]

这有效,但很多警告。特别是,引用shell的内容是一个非常重要的问题,而且你无法移植到Windows(通过命令行处理器运行的咒语略有不同)。你还有一个额外的过程,但这在实践中并不是一个大问题,除非你真的拉伸了系统资源的限制。

优点是你可以在那里使用完整的shell语法,否则可以做一些非常尴尬的事情。它也更广为人知,所以我会向具有中等专业知识水平的用户展示它。 (新用户应该坚持使用罐头材料;真正的专家可以编写一些Tcl脚本。)

答案 1 :(得分:2)

我找到答案,命令必须写成

puts [exec "./program" < inputfile]