Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^7: Perl sftp behavior when there are no files in the share

by soonix (Monsignor)
on Mar 27, 2013 at 18:41 UTC ( #1025786=note: print w/replies, xml ) Need Help??

in reply to Re^6: Perl sftp behavior when there are no files in the share
in thread Perl sftp behavior when there are no files in the share

This is untested, because I haven't yet figured out how to use cpan with the perl interpreter on my smartphone :-)

First you need the callback routine, like this:

sub show_progress { my($sftp, $data, $offset, $size) = @_; print "downloaded $offset of $size bytes\r"; }
The \r positions the cursor to the beginning of the line, so that the next print overwrites it.

Then you change

$sftp->get($REM_FILE, callback => \&show_progress)
That should do the trick...

Replies are listed 'Best First'.
Re^8: Perl sftp behavior when there are no files in the share
by Bindo (Acolyte) on Mar 28, 2013 at 12:50 UTC

    Thank you again sir. I tried but it gives me this error.

    Odd number of elements in hash assignment at /usr/lib/perl5/site_perl/ +5.10.0/Net/SFTP/ line 1432. Invalid option 'CODE(0xa53608)' or bad combination of options at ./gtp line 66

    Any thoughts sir? Also what would be the easiest way to get what I want without using CSPAN stuff? As in that simple progresss shown when you download the file manually? Many thanks in advance sir.

      It seems there is a small error in the code by soonix. The Net::SFTP::Foreign documentation says that ->get takes the local name of the file as second parameter and the rest are options. So if you want to display the progress, you'll also have to provide the local name, for example like this:

      ... use File::Basename; my $local_name= basename( $REM_FILE ); warn "Saving '$REM_FILE' to '$local_name'"; $sftp->get($REM_FILE, $local_name, callback => \&show_progress) ...

      This is actually two replies in one. First, thanks (and ++) to Corion for pointing out the mistake in my solution above.

      Now Bindo, your question for a solution without CPAN... I think doing SFTP in pure Perl, while possible, would be difficult and error-prone. If you just don't want any additional CPAN modules, that's another question:

      As far as I see, your $REM_FILE already is a file name without directory, so you don't need the basename function and module, and can simply

      $sftp->get($REM_FILE, $REM_FILE, callback => \&show_progress)
      Perhaps that already does what you want.

      Update: second parameter in get corrected

        Appologies gentlemen that I was away. Well thank you everyone who have shared the thoughts towards my query. Mr Soonix no luck sir. Following is exactly what I tried, No progress is shown when I downloaded file :(.

        print "Connecting to the sftp share! Please wait....!\n"; my $sftp = Net::SFTP::Foreign->new($LOG_HOST, user => +$REM_USER, password => $REM_PASSW); $sftp->setcwd($REM_PATH) or die "unable to change cwd: + " . $sftp->error; print "OK. On the share! Downloading the file \"$REM_F +ILE\"...................!\n\n\n"; $sftp->error and die "Problem connecting to the share. +..!!!! " . $sftp->error; # if ($sftp->get($REM_FILE)){ if ($sftp->get($REM_FILE, $REM_FILE, callback => \&sho +w_progress)) { print "File \"$REM_FILE\" downlaoded to ===> +\"$LOC_PATH$LOC_DIR\"\n\n"; } else { print "File \"$REM_FILE\" does not seem to hav +e been sent. Please re-request...!\n\n"; } sub show_progress { my($sftp, $data, $offset, $size) = @_; print "downloaded $offset of $size bytes\r";

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1025786]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-03-24 20:07 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (299 votes). Check out past polls.