Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
more useful options
 
PerlMonks  

Fool a process into thinking that STDOUT is a terminal

by etcshadow (Priest)
on Oct 14, 2003 at 02:46 UTC ( #299012=snippet: print w/ replies, xml ) Need Help??

Description: Fool a process into thinking that STDOUT is a terminal, when in fact it may be a file or a pipe.
This can be useful with programs like ps and w on linux... which will trunc their output to the width of the terminal, and, if they cannot detect the terminal width, use a default 80 columns. Wouldn't it be nice to say "ps -aux | grep etcshadow", and get output that looks like when you just say "ps -aux"? Well, that's the idea.

#!/usr/bin/perl -w
# Fools a process into thinking that STDOUT is a terminal,
# when in fact it may be a file or a pipe.
use IO::Pty;
use strict;
die "usage: $0 command [args]\n" unless @ARGV;

my $pty = IO::Pty->new;
my $slave = $pty->slave;
open TTY,"/dev/tty" or die "not connected to a terminal\n";
$pty->clone_winsize_from(\*TTY);
close TTY;

my $pid = fork();
die "bad fork: $!\n" unless defined $pid;
if (!$pid) {
    $slave->close();
    open STDOUT,">&=".$pty->fileno() or die $!;
    exec @ARGV;
}
else {
    $pty->close();
    while (defined (my $line = <$slave>)) {
        print $line;
    }
}
Comment on Fool a process into thinking that STDOUT is a terminal
Download Code
Re: Fool a process into thinking that STDOUT is a terminal
by zentara (Archbishop) on Oct 14, 2003 at 19:37 UTC
    Hi, I tried playing around with your script, and it's acting funny for me with linux, perl5.8.0. When I run something like "./pseudotty ls -la" or "./pseudotty ps -aux" ; it sometimes will run and sometimes I get no output. There dosn't seem to be any pattern to it. If I run the commands rapidly in succession, sometimes they give output, sometimes nothing. I get the same problem from an xterm or console. Any idea why?
      Hmmm... I guess it could be a version issue... I'm workin off of 5.005_03, also on linux.

      I suppose it could also have to do with this issue listed in the docs for IO::Tty

              Linux 2.2.x & 2.4.x
                 Returns EIO instead of EOF when the slave is closed.  Benign.
      
      Not sure.

      ------------
      :Wq
      Not an editor command: Wq

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://299012]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (7)
As of 2014-04-19 03:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (477 votes), past polls