Python FTP Tool Some Issues but works ok

Questions about programming languages and debugging
Post Reply
User avatar
maboroshi
Dr. Mab
Dr. Mab
Posts: 1624
Joined: 28 Aug 2005, 16:00
18

Python FTP Tool Some Issues but works ok

Post by maboroshi »

hey all Maboroshi Here

Just wondering if some one could help me rewrite my code a little for better error handling

also need a little help with threads seems I get a thread already started error when hitting connect more than once

Any ideas

Other than here is an FTP Tool I built

Code: Select all

from Tkinter import *
from ftplib import *
import os
import sys
from threading import *
import tkFileDialog

def connectFTP():
    try:
        host = entryFTP.get()
        global f
        f = FTP(host)
        textdata.delete(0.0, END)
        textdata.insert(END, "Welcome " + f.getwelcome())
        f.login(entryFTPus.get(), entryFTPp.get())
        textdata.insert(END, "\n\n")
        listFTPdirectory()
    except:
        f.quit()
        textdata.insert(END, "\n\nFailed Connecting\n\n")
        
def listFTPdirectory():
    listb1.delete(0, END)
    changepath.delete(0, END)
    changepath.insert(END, f.pwd)
    global entries
    entries = []
    entries = f.nlst()
    entries.sort()

    #print "%d entries:" % len(entries)
    global entry
    for entry in entries:
        listb1.insert(END, entry)
    listb1.select_set(0)

def select2(event):
    selection = listb1.curselection()
    selectchange = entries[int(selection[0])]
    try:
        f.cwd(selectchange)
        listFTPdirectory()
    except:
        textdata.insert(END, "Failed")

def change():
    f.cwd(changepath.get())
    listFTPdirectory()

def pwdit():
    #doit = 
    changepath.delete(0, END)
    changepath.insert(END, f.pwd())

##def uploaddirectory():
##    fileopen = tkFileDialog.askdirectory()
##    pathUpload.insert(END, fileopen)
##    for root, dirs, files in os.walk(str(pathUpload.get())):
##        for name in files:
##            lname = name.lower()
##            filepath = os.path.join(root, name)
##            fd = open(filepath, 'rb')
##            f.storbinary('STOR %s' % filepath, fd)
##            fd.close()                                     

def uploadbinary():
    try:
        thefile = pathUpload.get() 
        fd = open(thefile, 'rb')
        f.storbinary('STOR %s' % os.path.basename(thefile), fd)
        textdata.insert(END, "\n\nFile Uploaded successfully\n\n")
    except:
        textdata.insert(END, "Failed Uploading\n\n")

def openFTP():
    try:
        pathUpload.delete(0, END)
        global fileopenftp
        fileopenftp = tkFileDialog.askopenfilename()
        pathUpload.insert(END, fileopenftp)
        textdata.insert(END, "Succesfully Opened File For Uploading:) \n\n")
    except:
        textdata.insert(END, "There was an error opening \n\n")
        textdata.insert(END, fileopenftp)
        textdata.insert(END, "\n")

def disc():
    sys.exit()

def run():
    #start a thread
    mythread.start()


def run2():
    #start a thread
    mythread2.start()



def run3():
    #start a thread
    mythread3.start()


def run4():
    #start a thread
    mythread4.start()

top2 = root = Tk()
top2.title("FTP Browser")
#top2.wm_resizable(0, 0)
top2.wm_iconbitmap("shinobi.ico")
top2.minsize(840, 450)
top2.option_readfile("optionDB")
mythread = Thread(target=connectFTP)
mythread2 = Thread(target=listFTPdirectory)
#mythread3 = Thread(target=pwdit)

mythread4 = Thread(target=uploadbinary)

frame = Frame(top2)


hword = Label(frame, text="Host")
hword.pack(side=LEFT)

entryFTP = Entry(frame)
entryFTP.pack(side=LEFT, fill=X, expand=True)

uword = Label(frame, text="Username")
uword.pack(side=LEFT)


entryFTPus = Entry(frame)
entryFTPus.pack(side=LEFT, fill=X, expand=True)

pword = Label(frame, text="Pass")
pword.pack(side=LEFT)


entryFTPp = Entry(frame)
entryFTPp.pack(side=LEFT, fill=X, expand=True)

connectbutton = Button(frame, text="Connect", command=run)
connectbutton.pack(side=LEFT)

frame.pack(fill=X)

frameE = Frame(top2)
pathUpload = Entry(frameE)
pathUpload.pack(side=LEFT, fill=X, expand=True)
b1 = Button(frameE, text="Open File", command=openFTP)
b1.pack(side=LEFT)

frameE.pack(fill=X)
frameP = Frame(top2)
changepath = Entry(frameP)
changepath.pack(side=LEFT, fill=X, expand=True)
frameP.pack(fill=X)
frameBu = frameBu = Frame(top2)
b2 = Button(frameBu, text="Upload Binary", command=run4)
b2.pack(side=LEFT)
b5 = Button(frameBu, text="Print Directory", command=pwdit)
b5.pack(side=LEFT)

b6 = Button(frameBu, text="Change Directory", command=change)
b6.pack(side=LEFT)
##b6 = Button(frameBu, text="Upload Directory", command=uploaddirectory)
##b6.pack(side=LEFT)


b5 = Button(frameBu, text="Disconnect", command=disc)
b5.pack(side=LEFT)
frameBu.pack(fill=X)

frame2 = Frame(top2)

scrollbar2 = scrollbar2 = Scrollbar(frame2)
scrollbar2.pack(side=RIGHT, fill=Y)
listb1 = listb1 = Listbox(frame2, selectmode=SINGLE)
listb1.pack(side=LEFT, fill=BOTH, expand=True)
listb1.bind('<Double-Button-1>', select2)
scrollbar2.config(command=listb1.yview)
listb1.config(yscrollcommand=scrollbar2.set)
frame2.pack(fill=BOTH, expand=True)
frame3 = Frame(top2)
scrollbar = scrollbar = Scrollbar(frame3)
scrollbar.pack(side=RIGHT, fill=Y)
textdata = textdata = Text(frame3)
textdata.pack(side=LEFT, fill=BOTH, expand=True)
textdata.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=textdata.yview)
frame3.pack(fill=BOTH, expand=True)

top2.mainloop()
http://www.techshinobi.com/software/ftptool.zip

Cheers

Post Reply