【问题标题】:exec perl script from tcl using bsub使用 bsub 从 tcl 执行 perl 脚本
【发布时间】:2013-05-30 13:25:52
【问题描述】:

我正在尝试使用 bsub 命令从 tcl 执行 perl 脚本。它执行了第一个命令,但之后它没有打印 puts 值,也没有执行其他命令。

eval [exec bsub -Ip -R "type=SPARC" -cwd /usr2/STATUS \
   '/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_submit \
   $c $T $E $review $Error $Reset $Analysis_Error \
   $DFTDSM_Analysis_Error $LP_Analysis_Error']

puts "error entered"

eval [exec bsub -Ip -R "type=SPARC" -cwd /usr2/STATUS \
   '/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_pldrc_submit \
   $c $T $W $Lint_Review_warning $Lint_Must_warning $Lint_Reset_warning \ 
   $DFT_Analysis_warning $DFTDSM_Analysis_warning $LP_Analysis_warning']

eval [exec bsub -Ip -R "type=SPARC" -cwd /usr2/SsATUS \
   '/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_pldrc_submit \
   $chip $TOP $runtime $run_time_lint_Review $run_time_lint_must \
   $run_time_Lint_Reset $run_time_DFT_Analysis $run_time_DFTDSM_Analysis \
   $run_time_LP_Analysis']

【问题讨论】:

    标签: tcl


    【解决方案1】:

    我假设上面的代码是 Tcl。我在这里看到了一些问题:

    1. 为什么要评估?它是否输出您要执行的 Tcl 代码?
    2. 你真的想要以下参数吗:

      bsub
      -Ip
      -R
      type=SPARC
      -cwd
      /usr2/STATUS
      '/usr2/j/local/bin/perl5.6.1
      /usr2/j/CAM_STATUS/auto_submit
      $c
      $T
      $E
      $review
      $Error
      $Reset
      $Analysis_Error
      $DFTDSM_Analysis_Error
      $LP_Analysis_Error'
      

      我想你想要exec bsub -Ip -R type=SPARC -cwd /usr2/STATUS "/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_submit $c $T $E $review $Error $Reset $Analysis_Error $DFTDSM_Analysis_Error $LP_Analysis_Error"

      如果你想要变量替换,使用"进行分组,否则{}(注意Tcl为此使用它自己的变量,如果你想要环境变量,使用$ENV(FOO)

    3. 当子进程完成时,您会从exec 获得标准输出。如果出现错误(某些内容被写入 stderr 或返回代码!= 0),则会引发错误。如果是这种情况,请使用周围的catch。如果您只是想将其打印到 std*,您可以使用以下“参数”将 std* 从子进程重定向到您的 std* 通道:>@stdout 2>@stderr

    所以我相信您的代码应该或多或少像这样(取决于您要归档的内容):

    exec bsub -Ip -R type=SPARC -cwd /usr2/STATUS "/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_submit $c $T $E $review $Error $Reset $Analysis_Error $DFTDSM_Analysis_Error $LP_Analysis_Error" >@stdout 2>@stderr
    puts "error entered"
    exec bsub -Ip -R type=SPARC -cwd /usr2/STATUS "/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_pldrc_submit $c $T $W $Lint_Review_warning $Lint_Must_warning $Lint_Reset_warning $DFT_Analysis_warning $DFTDSM_Analysis_warning $LP_Analysis_warning" >@stdout 2>@stderr
    exec bsub -Ip -R type=SPARC -cwd /usr2/SsATUS "/usr2/j/local/bin/perl5.6.1 /usr2/j/CAM_STATUS/auto_pldrc_submit $chip $TOP $runtime $run_time_lint_Review $run_time_lint_must $run_time_Lint_Reset $run_time_DFT_Analysis $run_time_DFTDSM_Analysis $run_time_LP_Analysis" >@stdout 2>@stderr
    

    【讨论】:

    • 如果程序确实输出 Tcl 代码,我会考虑在安全的解释器中对其进行评估,以阻止它做“邪恶的事情”。
    • 只是强调一下,单引号在 Tcl 中没有特殊含义。 Tcl 相当于shell 的单引号是{braces}
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多