我正在编写一个perl脚本,该脚本从中运行另一个tcl脚本。终端不打印任何内容,而是等待tcl脚本完成。
`chmod +x runme.tcl`; `./runme.tcl 2>&1`;
有人可以帮助我如何在终端上打印tcl脚本的结果,而不仅仅是等待它完成吗?
谢谢
答案 0 :(得分:2)
您可以使用Tcl
模块直接从tcl
运行perl
脚本,而不必弄乱qx
或system
:
#!/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`;