Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Re: FTP Transfer Status

by DrManhattan (Chaplain)
on Mar 11, 2003 at 19:44 UTC ( [id://242130]=note: print w/replies, xml ) Need Help??


in reply to Re: FTP Transfer Status
in thread FTP Transfer Status

This is kind of kludgey, but here's a way to output arbitrary text for each hash mark Net::FTP prints.
#!/usr/bin/perl use strict; use Net::FTP; my $BYTES_PER_HASH = 1024; # Fork a child process for Net::FTP # and capture its output one char at # a time if (open(FTP, "-|")) { # parent my $count = 1; while (getc(FTP)) { print $BYTES_PER_HASH * $count, " bytes received\n"; $count++; } print "Done\n"; } else { # child my $ftp = Net::FTP->new("ftp.microsoft.com", Debug => 0); $ftp->login("anonymous","-anonymous\@"); $ftp->cwd("MISC"); $ftp->hash(\*STDOUT, $BYTES_PER_HASH); $ftp->get("NBFCP.TXT"); $ftp->quit; }

If you know the size of the file (or use Net::FTP to get it before starting the download), you could use this to output a progress meter. If you don't want to output plain text, you could output javascript that updates a graphic meter instead.

-Matt

Replies are listed 'Best First'.
Re: Re: Re: FTP Transfer Status
by allyc (Scribe) on Mar 11, 2003 at 21:18 UTC
    Guys,

    Thanks for all of your help. I am looking at Matt's solution. The fork part of the script doesn’t seem to work properly. I have tried it on a Windows machine running Perl 5.6.1 and it runs the child process and carries out the FTP but it dosnt print the Bytes recieved, however on a Linux machine also with Perl 5.6.1 it just prints done. and FTP's nothing and also displays no Bytes Recieved.

    Any ideas because this method looks very promising.

    Thanks again for all your help.

    Al

      It could very well be hosed under Win32. I'm not sure how well a Win32 perl port would simulate fork(). It does work alright for me under Linux though.

      As it's written now, the script exits silently if there's an error. Try copying out the bit listed as "child" into a separate file, setting Debug => 1, and seeing if it gives you any output.

      #!/usr/bin/perl use strict; use Net::FTP; my $BYTES_PER_HASH = 1024; # child my $ftp = Net::FTP->new("ftp.microsoft.com", Debug => 1); $ftp->login("anonymous","-anonymous\@"); $ftp->cwd("MISC"); $ftp->hash(\*STDOUT, $BYTES_PER_HASH); $ftp->get("NBFCP.TXT"); $ftp->quit;

      -Matt

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-03-29 04:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found