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

this program is to collect data that is running from window to network devices using SSH2.Output came but do no how to download it as .txt or .pdf in perl .Here is my code and any help will help to improve my knowledge

#!/usr/bin/perl use Net::Ping; use Net::SSH2; use strict; use warnings; my $ssh = Net::SSH2->new(); my $username="username"; my $password="password"; my $ip_address = ("ipadderss"); my $ping= Net::Ping->new(); if($ping->ping($ip_address)) { if($ssh->connect($ip_address)) { if($ssh->auth_passwo +rd($username,$password)) { my $chan = $ssh->channel(); $chan->blocking(1); $chan->shell(); $chan->write("terminal length 0\n"); $chan->write("show cdp neighbor \n"); while (<$chan>) { print if /\bterminal length\b/i .. /^\n*$/ ; } # $chan->close; } else { print "auth failed"; } } } else { print "not pinging"; }

Replies are listed 'Best First'.
Re: download as txt and pdf
by stevieb (Canon) on Dec 01, 2016 at 15:21 UTC

    You're not downloading anything in this case, you're simply printing to your local console the output of a remote device (a Cisco network device, apparently). I've reformatted your code below (so it's easier to read/follow), and added a couple of things that will write your output to a file named "output.txt". Note that this code is untested:

    use strict; use warnings; use Net::Ping; use Net::SSH2; my $output_file = 'output.txt'; my $ssh = Net::SSH2->new(); my $username="username"; my $password="password"; my $ip_address = ("ipadderss"); my $ping= Net::Ping->new(); if($ping->ping($ip_address)){ if($ssh->connect($ip_address)){ if($ssh->auth_password($username,$password)){ my $chan = $ssh->channel(); $chan->blocking(1); $chan->shell(); $chan->write("terminal length 0\n"); $chan->write("show cdp neighbor \n"); # open the output file in overwrite mode # (use '>>' if you want to append instead) open my $wfh, '>', $output_file or die $!; while (<$chan>) { # instead of printing to the console, print # to the file handle instead print $wfh $_ if /\bterminal length\b/i .. /^\n*$/ ; } } else { print "auth failed"; } } } else { print "not pinging"; }

    update: added the default var after the print to the file handle, per Re^3: download as txt and pdf.

      thank you for the reply steve. This time got error like this and not printing on my console and reurns empty file. Any help.

      Net::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Ne +t::SSH2::C hannel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Cha +nnel=GLOB( 0x2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x +2a7a444)Ne t::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Net: +:SSH2::Cha nnel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Chann +el=GLOB(0x 2a7a444)Net::SSH2::Channel=GLOB(0x2a7a444)Net::SSH2::Channel=GLOB(0x2a +7a444)Pres s any key to continue . . .

        Sorry, that's my fault. Change this line:

        print $wfh if /\bterminal length\b/i .. /^\n*$/;

        ...to this (the only change is the addition of the default variable ($_) after the file handle variable):

        print $wfh $_ if /\bterminal length\b/i .. /^\n*$/;