【问题标题】:How can i catch error message from command line TCL我如何从命令行 TCL 捕获错误消息
【发布时间】:2014-12-04 11:44:48
【问题描述】:

我正在 ICC 上的 tcl 编写脚本,并尝试在将 run 发送到 sung-grid 时收到错误消息。

例如,我有以下行。

sh /usr/bin/xterm -e "cd DM ; mqsub -int -parallel 200 cal -cal -t 200 CAL_header | tee S.log ; touch .S_finished" &

因为我没有 200 个可用的 cpu,如果我在 linux shell 上执行此命令行,我将收到以下消息: “您的“qrsh”请求无法安排,请稍后再试。”

如何在 ICC 中使用 & 和命令结尾来捕获此错误消息?

谢谢

【问题讨论】:

    标签: try-catch tcl message qsub vlsi


    【解决方案1】:

    我假设,您正在通过在 tcl 中使用 exec 来执行 shell 命令。

    在这种情况下,您可以使用catch 语句来识别错误消息。

    if { [catch {exec <your_shell_program_command_here>} result] } {
        puts "Following problem happened : $result"
        exit 1
    } 
    

    语法:

    catch script ?varName?
    

    引用man page下面的内容

    如果脚本引发错误,catch 将返回一个非零整数值 对应于评估返回的异常返回码 脚本。 Tcl 定义了从脚本评估到的正常返回码 为零 (0) 或 TCL_OK。 Tcl 还定义了四种异常返回 代码:1 (TCL_ERROR)、2 (TCL_RETURN)、3 (TCL_BREAK) 和 4 (TCL_CONTINUE)。脚本评估期间的错误由 返回码 TCL_ERROR。

    【讨论】:

    • 在尝试执行 /usr/bin/xterm 时,我收到以下消息:错误:/usr/bin/xterm:/usr/bin/xterm:无法执行二进制文件
    【解决方案2】:

    您是指 Synopsys ICCompiler 术语 ICC 吗?

    如果 queue 为任何 EDA 工具启动作业有任何错误,请使用以下启动方式。

    {launch command for job (qsub *switches* ) } > & log &
    

    这将消除故障排除的困难。 很抱歉发布这个问题作为答案,但我无法发表评论

    【讨论】:

    • 是的,你说得对。我的意思是 Synopsys ICCompiler。什么是“启动命令”?你能写下我的主要信息上建立的完整命令吗?
    • qsub -P bnormal -l "project=msem,os_distribution=redhat,qsc=i,os_version=WS5.0,mem_free=8G" -v version_path=/remote/user/emll/tools/system//latest -o vnc_logs -cwd -A long /remote/user/emll/tools/system/latest/bin/ss &gt; &amp; log &amp; 这是典型的启动命令示例
    • qsh 版本必须在命令启动前设置。由于您尝试使用 200 个空闲 CPU 启动作业,但我看不到它们的队列类型。我建议您与您当地的 IT 团队会面并检查“长”队列。通常这种类型的工作首选长队列
    • 我认为使用setenv term xterm 或更好地在其他文件中写下命令并获取文件来更改术语。如果所有环境设置(即#!/usr/bin/****)都需要,请使用 shebang 作为文件头
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多