; This version only works on Windows (so far) pro wget,cmd,serverdir=serverdir,localdir=localdir,pathnames=pathnames,nowait=nowait, $ outputfile=outputfile, $ exit_status=exit_status, $ verbose=verbose, $ ncutdirs=ncutdirs dprint,dlevel=4,verbose=verbose,'Start: %Id %' if 1 then timestamp = time_string(systime(1),tformat='_YYYYMMDD_hhmmss',/local) $ else timestamp = '' if keyword_set(pathnames) then begin if not keyword_set(listfile) then begin tempfile = 'wget-list'+timestamp+'.txt' tempfile = filepath(/tmp,tempfile) openw,unit,tempfile,/get_lun,/append for i=0,n_elements(pathnames)-1 do printf,unit,pathnames[i] flush,unit free_lun,unit listfile=tempfile endif endif dprint,dlevel=2,'Checking remote server ',serverdir,' for the following ',n_elements(pathnames),' files:' for i=0,n_elements(pathnames)-1 do dprint,dlevel=2,verbose=verbose,pathnames[i] dprint,dlevel=3,verbose=verbose,'Download list file: "',listfile,'"' ;wget_exe = 'wget' ;scope=scope_traceback(/struct) ;dir = file_dirname(scope[n_elements(scope)-1].filename) ;prog ='"'+dir+'/wget" ' if not keyword_set(opts) then opts = ' --timestamp -x -nH' ; Use timestamps, retain directory structure, ignore host directories ;opts = '--help ' if keyword_set(localdir) then opts=opts+ ' -P'+localdir ; Quoting localdir seems to fail on windows, Using environment variable if keyword_set(pathnames) then opts=opts+ ' -i "'+listfile+'"' if keyword_set(serverdir) then begin opts = opts+' -B '+serverdir if n_elements(ncutdirs) eq 0 then begin ; determine number of directories to cut pos = 0 n = -1 while pos ge 0 do begin pos = strpos(serverdir,'/',pos+1) n=n+1 endwhile endif ncutdirs = n-3 > 0 endif if keyword_set(ncutdirs) then opts = opts+' --cut-dirs='+strtrim(ncutdirs,2) if keyword_set(outputfile) then begin opts=opts+' -o '+outputfile hide = 1 endif ;if not keyword_set(nowait) then opts = opts+'-o wget.log ' wgetcmd = 'wget '+opts + ( keyword_set(cmd) ? cmd : '') ;printdat,prog,opts,cmd,wgetcmd for i=0,n_elements(pathnames)-1 do dprint,dlevel=4,pathnames[i] dprint,dlevel=3,verbose=verbose,wgetcmd if !version.os_family eq 'Windows' then begin ; Windows only: hide=1 setenv,'wgetcmd='+wgetcmd ;This is needed to get around quote problems in MS Windows if listfile eq '-' then begin ; pipes spawn,'%wgetcmd%',exit_status=exit_status,nowait=nowait,hide=hide,pid=pid,unit=lunit ;,result,stderr ;,count=count dprint,dlevel=2,verbose=verbose,'unit=',lunit dprint,dlevel=2,verbose=verbose,/phelp,exit_status dprint,dlevel=2,verbose=verbose,/phelp,pathnames for i=0,n_elements(pathnames)-1 do printf,unit,pathnames[i] flush,lunit wait,.2 if keyword_set(lunit) then free_lun,lunit endif else begin spawn,'%wgetcmd%',exit_status=exit_status,hide=hide ;,result,stderr ;,count=count endelse endif else begin ; all other (UNIX) spawn,wgetcmd,exit_status=exit_status,unit=unit endelse ;printdat,result,stderr,count,exit_status nstderr = n_elements(stderr) for i=0,n_elements(result)-1 do dprint,dlevel=3,verbose=verbose,result[i] for i=0,nstderr-2 do dprint,dlevel=3,verbose=verbose,stderr[i] if nstderr gt 0 then dprint,dlevel=1,verbose=verbose,stderr[nstderr-1] ;dprint,localname,file_valid(localname) dprint,dlevel=4,verbose=verbose,/phelp,pid end