Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Expect.pm control terminal width

by jmclark (Novice)
on Oct 07, 2008 at 21:27 UTC ( #715856=perlquestion: print w/replies, xml ) Need Help??
jmclark has asked for the wisdom of the Perl Monks concerning the following question:

Hi, using perl 5.8.8 on ubuntu. I have a script that uses expect.pm to ssh to a device, pull some configs, parse the configs and tell the user if certain things are configured correctly or not. Everything is working great except for one device type that is a cisco content engine. The problem is, I suppose that this device sets the column width to a pretty small number when connected via script so all the output wraps which makes it near about impossible to pull what I need from it in an orderly fashion. Can someone tell me how to manually tell the device what my column width is. It seems to work fine in my ssh client, but when accessing it through the script is all wrapped. So again, I'd assume it is a setting that the client is sending to the device. Within the IOS of the device there is no way to manually set the width such as on catos' "set width XXX" Thanks, J

Replies are listed 'Best First'.
Re: Expect.pm control terminal width
by Illuminatus (Curate) on Oct 07, 2008 at 21:56 UTC
    1. Use Net::SSH::Expect instead. I believe it makes better terminal assumptions
    2. try the 'stty' and/or 'slave' methods in expect.pm: $object->stty(qw("cols 200"));
      problem with converting it over to Net::SSH::Expect is that the script is completely done and is around 4k lines of code. It just recently became a problem because of some changes on the devices that have longer outputs so I'd have to competely re-write the script.
      $object->stty(qw("cols 200"));
      Returns:
      IO::Stty::stty passed invalid parameter '"cols'
      IO::Stty::stty passed invalid parameter '200"'
      I also tried columns, no quotes, etc.
        Drop the quotation marks (the ones inside the qw):
        $object->stty(qw(cols 200));
        What you have is passing "cols and 200" to stty, which it does not recognize (as indicated in the error messages). Also note that according to the docs, you probably want to be using the slave side of the pty:
        $object->slave->stty(qw(cols 200));

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2018-11-14 23:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My code is most likely broken because:
















    Results (178 votes). Check out past polls.

    Notices?