banduwgs has asked for the wisdom of the Perl Monks concerning the following question:

I want to write an application which excute different programs and each of its screen outputs should go to different console windows.

Further, is it possible to open another console through the program?

Thanks - SB

Update:

I am using WinNT platform with perl 5.8.0 (Sorry for incompleteness)

Replies are listed 'Best First'.
Re: Get output to different windows
by BrowserUk (Patriarch) on Oct 15, 2003 at 08:29 UTC

    Your question is abiguous. Do you want to

    1. Spawn several commands and have each present it own results in seperate console windows?
    2. Spawn several commands, capture the output into your script and the present the output into several console windows?
    3. Which OS do you want to do this on?

    Assuming the former, and the Win32 platform, then

    system( 'start thecommand its args here' );
    will do the trick. There's probably an equivalent for *nix.

    If the latter is the case, then you might start by looking at this Open a second DOS window recent thread to see if the work involved is commensurate with your need for this.

    It is possible, but awkward and somewhat messy to do this on Win32. I have a partial solution (on the thread). I also have a slightly different variation which I find more satisfactory. This consists of placing the different sets of output into different buffers and using Ctrl-TAB/Ctrl-Shift-TAB, to cycle through them within the same screen. This has numerous advantages IMO, and mirrors the mechanisms found in many editors, browsers etc.

    The code I have for this is mostly in my head and a few skeletal test scripts. It's one of many projects that I might get around to completing if I ever found a need for it.


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail
    Hooray!

Re: Get output to different windows
by Abigail-II (Bishop) on Oct 15, 2003 at 09:23 UTC
    You don't specify in which environment you are working, so I just presume you work in Perl's native environment UNIX, and that you are using X-windows as your GUI environment. (If you happen to work in a different environment, you've wasted a lot of time, time I can't spend answering other peoples questions.)
    #!/usr/bin/perl use strict; use warnings; my $pid = fork err die "Failed to fork: $!"; unless ($pid) { exec "xterm" or die "Failed to exec: $!"; } # $pid is the PID of 'xterm', but we want the PID of the shell # that's run by the xterm. # First we need to give the child time to spawn the shell. sleep 1; my $shell_pid; open my $ps => "ps -ef |" or die "Failed to open pipe: $!\n"; while (<$ps>) { my ($uid, $proc_pid, $proc_ppid) = split; if ($proc_ppid && $proc_ppid eq $pid) { $shell_pid = $proc_pid; last; } } # Open the pseudo-terminal of the shell, and print something. open my $fh => "> /proc/$shell_pid/fd/1" or die "Failed to open termin +al: $!"; print $fh "Hello!\n"; close $fh; __END__

    Abigail

Re: Get output to different windows
by davido (Cardinal) on Oct 15, 2003 at 08:16 UTC