Karan
Karan

Reputation: 13

Printing the result of the script(running in background) on the terminal

I am writing a perl script which runs another tcl script from it. The terminal doesn't print anything and waits for the tcl script to complete.

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

Can anyone please help me on how to print the results of the tcl script on the terminal instead of just waiting for it to get completed?

Thank you

Upvotes: 1

Views: 200

Answers (3)

ikegami
ikegami

Reputation: 385799

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

Upvotes: 2

Shawn
Shawn

Reputation: 52364

You can run tcl scripts directly from perl using the Tcl module without having to mess around with qx or system:

#!/usr/bin/env perl
use warnings;
use strict;
use Tcl;

Tcl->new->EvalFile("runme.tcl");

It'll share the same standard output as the perl script.

If you're using a new enough version of Tcl, you can easily create a safe interpreter to evaluate the script in case it tries to do anything nasty:

#!/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");

Upvotes: 2

mob
mob

Reputation: 118605

Backticks capture the output of an external command. You can write that output with a print command in front of the backticks.

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

Upvotes: 1

Related Questions