我需要在TCL中执行un程序,这个程序执行起来很长,并且在执行过程中我需要显示程序生成的日志。不幸的是,由于未知的原因,该程序无法使用经典方式(fileevent 等)让 TCL 捕获其输出: 在 Windows 上,特定程序无法让 TCL 捕获其输出,而 Linux 版本正在运行太棒了
因此,解决方法是执行程序并将程序的所有输出重定向到文件内,并且在程序执行期间,相同的 tcl 脚本将读取生成的文件。
我的所有试验目前都失败了,因为当文件重定向完成后,fileevent 不再起作用并生成错误。
我需要能够在 TCL 中启动程序,并将输出重定向到文件中,我需要 TCL 不等待程序执行结束,并且 TCL 需要开始读取该工具正在写入的文件。如果 TCL 仍然能够知道程序已完成执行,那就太好了(我知道如何使用 open + fileevent 来执行此操作,但如果我使用此方法 + 输出重定向似乎会出现问题)。
使用命令行窗口:D: pp\iao\qverify.exe -od output_files -l qverify.log -c -do run_questalint_top_fb_a429_tx.do > test1.txt 它工作得很好,所有输出都被重定向到一个文件内。但使用 TCL 我没有成功
要将输出重定向到 Tcl 中的文件,请使用:
exec programName >theOutputFileName
启动时。在某些情况下,您还需要向程序传递选项以使其合作;这是非常特定于程序的,因此您必须查阅文档才能确定。上面的重定向肯定会要求将输出发送到那里。
如果您正在使用管道,语法为:
open |[list programName >theOutputFileName]
一旦创建,该文件就只是一个常规文件。如果其他程序生成文本,则它将是文本;如果其他程序生成二进制数据,则它将是二进制。通过
open
并使用 gets
和/或 read
来阅读它。