在终端上打印脚本的结果(在后台运行)

时间:2020-10-12 17:24:55

标签: perl tcl

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

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

有人可以帮助我如何在终端上打印tcl脚本的结果,而不仅仅是等待它完成吗?

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用Tcl模块直接从tcl运行perl脚本,而不必弄乱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");

答案 1 :(得分:2)

system('chmod +x runme.tcl');
system('/runme.tcl 2>&1');

答案 2 :(得分:1)

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

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