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()
Cheers