【问题标题】:Printing the result of the script(running in background) on the terminal在终端上打印脚本的结果(在后台运行)
【发布时间】:2020-10-12 17:24:55
【问题描述】:

我正在编写一个运行另一个 tcl 脚本的 perl 脚本。终端不打印任何内容,等待 tcl 脚本完成。

`chmod +x runme.tcl`; `./runme.tcl 2>&1`;

谁能帮我看看如何在终端上打印 tcl 脚本的结果,而不是等待它完成?

谢谢

【问题讨论】:

  • 反引号捕获命令的输出,你可能想要system
  • @AKHolland 非常感谢。它与“系统”一起使用

标签: perl tcl


【解决方案1】:
system('chmod +x runme.tcl');
system('/runme.tcl 2>&1');

【讨论】:

    【解决方案2】:

    您可以使用Tcl 模块直接从perl 运行tcl 脚本,而不必乱用qxsystem

    #!/usr/bin/env perl
    use warnings;
    use strict;
    use Tcl;
    
    Tcl->new->EvalFile("runme.tcl");
    

    它将与 perl 脚本共享相同的标准输出。

    如果您使用的是足够新的Tcl 版本,您可以轻松创建safe interpreter 来评估脚本,以防它尝试做任何讨厌的事情:

    #!/usr/bin/env perl
    use warnings;
    use strict;
    use Tcl v1.05;
    
    my $interp = Tcl->new;
    my $safeinterp = $interp->CreateSlave("safeinterp", 1);
    $interp->Eval('interp share {} stdout safeinterp');
    $interp->Eval('interp share {} stderr safeinterp');
    $safeinterp->EvalFile("runme.tcl");
    

    【讨论】:

    • (这对于 OP 来说可能是矫枉过正,除非他想对 tcl 脚本进行沙箱处理,但我受到启发,继续我对 mob 答案的评论,看看这个想法是否可行)
    【解决方案3】:

    反引号捕获外部命令的输出。您可以在反引号前使用print 命令编写该输出。

    `chmod +x runme.tcl`; print `./runme.tcl 2>&1`;
    

    【讨论】:

    • 我会使用 system 来作为 chmod。或者更好的是,直接在 Perl 中完成,而不是调用 shell。
    • 射击,可能有一个模块可以从 perl 控制一个 tcl 解释器,可以用来运行脚本。
    猜你喜欢
    • 2012-05-29
    • 2016-03-26
    • 2017-06-13
    • 2018-01-08
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多