tcl FTP package

Clovertech Forums Read Only Archives Cloverleaf Tcl Library tcl FTP package

  • Creator
    Topic
  • #47751
    Ted Mech
    Participant

      Has anyone successfully used the ‘ftp tcl’ package & would you be willing to share code?

    Viewing 1 reply thread
    • Author
      Replies
      • #56622
        Rob Lindsey
        Participant

          I have loaded the tcllib1.2 package that contains ftp.

          I have written TCL programs outside the engine to use this ftp package.

          Here is some code that I use to connect to a client site (of course use at your own risk):

          Code:

          #!/hci/root3.8.1P/bin/hcitcl

          package require FTP 1.2

          proc main { } {
             puts “Job started at [clock format [getclock]]”
             puts “”
             set addresses “group”

             set host [hostname]
             if { $host == “test_system” } {
                 set server “1.1.1.1”
                 set local_out “/clients//OUTBOUND/”
                 set local_inb “/clients/
          /INBUILD/”
                 set local_in “/clients/
          /INBOUND/”
                 set local_arch “/clients/
          /ARCHIVE/”
                 set build “/”               ;# building place on
                                                                # remote system
                 set inbound “/INBOUNDT/”         ;# inbound dir on remote
                 set archive_in “/Archive/”   ;# archive dir on remote
                 set archive_out “/Archive/” ;# archive dir on remote
                 set outbound “/OUTBOUNDT/”       ;# outbound dir on remote
                 set user “
                 set passwd “
             } elseif { $host == “prod_system” } {
                 set server “”
                 set local_out “/clients//OUTBOUND”
                 set local_inb “/clients/
          /INBUILD”
                 set local_in “/clients/
          /INBOUND”
                 set local_arch “/clients/
          /ARCHIVE/”
                 set build “”               ;# building place on
                                                                # remote system
                 set inbound “”          ;# inbound dir on remote
                 set archive_in “”    ;# archive dir on remote
                 set archive_out “”  ;# archive dir on remote
                 set outbound “”        ;# outbound dir on remote
                 set user “”
                 set passwd “”
             }

             if { $host == “” } {
                 set subject “No host set to go to …. exiting.”
                 puts $subject
                 set err [error_mail $subject $addresses $subject]
                 exit
             }

             # open a new connection
             if {[set conn [FTP::Open $server $user $passwd -progress Progress]] == -1} {
                     set subject “Connection refused to $server”
                     puts $subject
                     set err [error_mail $subject $addresses $subject]
                     exit
             }

             cd $local_out

             set return [FTP::Type ascii]

             set locallist [readdir [exec pwd]]

             set return [FTP::Cd $build]     ;# go to where we send the initial file
             if { $return == 0 } {
                 set subject “Can not change directory to $build”
                 puts $subject
                 set err [error_mail $subject $addresses $subject]
                 FTP::Close
                 exit
             }

             foreach file $locallist {
                 if { [file isdirectory $file] } { continue }
                 sleep 1

                 set return [FTP::Put $file]
                 if { $return == 0 } {
                     set subject “PUT of file – $file – failed!”
                     puts $subject
                     set err [error_mail $subject $addresses $subject]
                     FTP::Close
                     exit
                 }

                 set to “$inbound$file”

                 set return [FTP::Rename $file $to]
                 if { $return == 0 } {
                     set subject “Rename of file  – $file – to — $to – failed!”
                     puts $subject
                     set err [error_mail $subject $addresses $subject]
                     FTP::Close
                     exit
                 }

                 set newfile “$local_arch$file”

                 set err [file rename -force $file $newfile] ;# mv file to archive

             }    ;# end of foreach file $locallist

             ################  go and get files from the system  #################

             set return [FTP::Cd $outbound]
             if { $return == 0 } {
                 set subject “Can not change directory to $outbound”
                 puts $subject
                 set err [error_mail $subject $addresses $subject]
                 FTP::Close
                 exit
             }

             cd $local_inb

             foreach file [FTP::NList $outbound] {
                 puts “file == $filen”
                 set tmpfile [lindex [split $file ;] 0]
                 set outext [file extension $tmpfile]
                 set short [lindex [split $file ] ] 1]
                 set return [FTP::Get $file $short]
                 if { $return == 0 } {
                     set subject “GET of file – $file – failed!”
                     puts $subject
                     set err [error_mail $subject $addresses $subject]
                     FTP::Close
                     exit
                 }

                 set to “$archive_out$file”
                 set return [FTP::Rename $file $to]
                 if { $return == 0 } {
                     set subject “Rename of file  – $file – to — $to – failed!”
                     puts $subject
                     set err [error_mail $subject $addresses $subject]
                     FTP::Close
                     exit
                 }

                 set final “$local_in$file”
                 regsub “;” $final “_” final
                 set err [file rename -force $file $final]

             }     ;# end of foreach file [FTP::NList $outbound]

             # close connection
             FTP::Close
             puts “”
             puts “Job completed SUCCESSFULLY at [clock format [getclock]]”
             puts “”

          }       ;# end of proc main

          # define callback
          proc Progress {total} {
                 puts “$total bytes transfered!”
          }

          proc error_mail { subject addresses error_text } {

             puts “calling error_mail”
             global error_flag
             set host [exec hostname]
             exec /bin/mail $addresses << "From: FTP_put_get_for_IBT    To: $addresses    From: FTP_put_get_for_IBT    Subject: $subject    host $host, please check!       happened at [exec date]    $error_text" }     ;# end of proc error_mail set err [main] if { $err == 1 } {    puts "errored out" } exit

          Hope this gives you some ideas.  

          Rob

        • #56623
          Ted Mech
          Participant

            Rob – Thanks!  You confirmed I’m on the right track.  I’ll keep working on it & let you know if we come up with anything interesting.

            Thanks again, Ted

        Viewing 1 reply thread
        • The forum ‘Tcl Library’ is closed to new topics and replies.