ich habe mir ein skript geschrieben, dass mir meine cgi-skripten, die ich für localhost entwickle so abgleicht, dass sie auch am webserver funktionieren. dieser weicht in der konfiguration in einigen punkten ab.
dabei wird einerseits zuerst in einem bestimmten verzeichnis am lokalen rechner eine kopie abgelegt und andererseits, sofern eine verbindung besteht, dieselbige sofort hochgeladen.
eigentlich klappt alles wunderbar, es gibt nur noch kleinigkeiten, die ich klären möchte.
ihr könnt natürlich auch gern anmerken was ihr bedenklich findet, was ich vielleicht anders machen sollte usw.
wenn ihr was gut findet dürt ihr es auch festhalten, grins,
hier mal das skript, das ist bereits die fassung mit gut:
Code: Alles auswählen
#!/usr/bin/python
import sys, os, pickle, ftplib
from re import *
from Tkinter import*
from ScrolledText import*
import tkMessageBox
class FtpUpload:
def __init__(self,my_filename):
try:
my_conn=ftplib.FTP\
('domain','user','password')
my_conn.cwd('/html/cgi-bin')
my_conn.storbinary\
('STOR %s' % my_filename, open(my_new_lin_path+my_filename, 'rb'))
a.my_listbox_b.insert(0,"Sucess, "+my_filename+" saved und uploaded!")
except:
a.my_listbox_b.insert(0,"No connection, "+my_filename+" saved bot not uploaded")
class ChangeContentForServer:
def __init__(self,my_choice,my_dir_index,my_configuration='n'):
self.my_choice=my_choice
self.my_dir_index=my_dir_index
for i in self.my_choice:
self.my_filename=self.my_dir_index[int(i)]
f=file(my_lin_path+self.my_filename,'r')
self.my_content=f.read()
f.close()
self.first_change_in_my_file()
def first_change_in_my_file(self):
self.my_content_new=self.my_content.replace\
('#!/usr/bin/python','#!/usr/local/bin/python')
self.second_change_in_my_file()
def second_change_in_my_file(self):
self.my_content_list=self.my_content_new.splitlines()
self.my_content_list.insert(1,"\n")
self.my_content_list.insert(2,"import sys")
self.my_content_list.insert\
(3,"sys.path.append('/var/www/web188/html/cgi-bin/module')")
self.my_content_ready=''
for i in self.my_content_list:
self.my_content_ready=self.my_content_ready+i+'\n'
self.third_change_in_my_file()
def third_change_in_my_file(self):
if self.my_content_ready.find('/var/www/html/'):
self.my_content_ready=self.my_content_ready.replace\
('/var/www/html/','/var/www/web188/html/')
self.fourth_change_in_my_file()
def fourth_change_in_my_file(self):
if self.my_content_ready.find('localhost'):
self.my_content_ready=self.my_content_ready.replace\
('localhost','crossoverguitar.weberanto.net')
self.ask_new_file_exists()
def ask_new_file_exists(self):
if os.access(my_new_lin_path+self.my_filename, os.F_OK):
my_answer=tkMessageBox.askyesno\
("Warnung","Datei "+self.my_filename+" exisitert! ueberschreiben?")
if my_answer==1:
self.write_new_file()
else:
tkMessageBox.showinfo\
("Info","Datei "+self.my_filename+" wird uebersprungen!")
else:
self.write_new_file()
def write_new_file(self):
f=file(my_new_lin_path+self.my_filename,'w')
f.write(self.my_content_ready)
f.close()
c=FtpUpload(self.my_filename)
class WindowForClassChange:
def __init__(self):
self.my_root=my_root=Tk()
my_root.wm_geometry('+20+20')
my_root.title("Window")
my_root.resizable(0,0)
my_root.protocol("WM_DELETE_WINDOW", self.mainexit)
#Abstand der Elemente
self.my_distance_x=5 #Abstand horizontal
self.my_distance_y=5 #Abstand vertikal
#Die Buttons bekommen alle dieselbe Breite
self.my_width=20
#Farbe wird auch von la verwendet
self.my_color="#FFFFFF"
self.my_label=Label(my_root,bg=self.my_color,text="///GARO_GUI")
self.my_label.grid\
(row=0,column=0,columnspan=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_scrollbar_a=Scrollbar(self.my_root, orient="vertical")
self.my_listbox_a=Listbox\
(self.my_root,width=50,height=20,selectmode=MULTIPLE,yscrollcommand=self.my_scrollbar_a.set)
self.my_scrollbar_a["command"]=self.my_listbox_a.yview
self.my_scrollbar_a.grid(row=1,column=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_listbox_a.grid\
(row=1,column=0,columnspan=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_dir_index = [f for f in os.listdir(dir) if f.endswith('.py')]
self.my_dir_index.sort()
for i in range(0,len(self.my_dir_index)):
self.my_listbox_a.insert("end",(i+1,self.my_dir_index[i]))
self.my_scrollbar_b=Scrollbar(self.my_root, orient="vertical")
self.my_listbox_b=Listbox\
(self.my_root,width=50,height=2,selectmode=MULTIPLE,yscrollcommand=self.my_scrollbar_b.set)
self.my_scrollbar_b["command"]=self.my_listbox_b.yview
self.my_scrollbar_b.grid(row=2,column=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_listbox_b.grid(row=2,column=0,columnspan=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_button_1=Button(my_root,width=self.my_width,text="Start",\
command=self.auswerten)
self.my_button_1.grid(row=3,column=0,columnspan=2,padx=self.my_distance_x,pady=self.my_distance_y)
self.my_button_2=Button(my_root,text="Prog. Beenden",width=10,\
command=self.ende)
self.my_button_2.grid \
(row=4,column=0,columnspan=2,padx=10,pady=10)
#my_root.mainloop()
def auswerten(self):
self.my_choice=self.my_listbox_a.curselection()
self.my_listbox_b.delete(0,END)
if self.my_choice:
b=ChangeContentForServer(self.my_choice,self.my_dir_index)
else:
tkMessageBox.showerror\
("Fehler","Zuerst Datei(en) auswaehlen!")
def ende(self):
my_answer=tkMessageBox.askyesno\
("Warnung","Sicher beenden?")
if my_answer==1:
sys.exit(0)
def mainexit(self):
self.my_root.withdraw()
if __name__=='__main__':
if len(sys.argv) > 1:
dir = sys.argv[1]
else:
dir = "."
f=file('/var/www/cgi-bin/config.txt','r')
my_conf=pickle.load(f)
f.close()
my_lin_path=my_conf['my_lin_path']
my_new_lin_path=my_conf['my_new_lin_path']
a=WindowForClassChange()
mainloop()
1. ich habe keine möglichkeit gefunden, oder ich hab eins meiner berühmten bretter vorm kopf, der hochgeladenen datei, gleich die richtigen rechte zu verpassen. mit
Code: Alles auswählen
os.chmod()
2. ich verstehe nicht ganz, warum
Code: Alles auswählen
mainloop
schreibe ich nämlich am ende des konstruktors;
Code: Alles auswählen
my_root.mainloop()
die dinge hätte ich noch gern geklärt, ansonsten läuft es wie geschmiert und ich bin froh den ganzen sergel nicht mehr manuell machen zu müssen.
mfg
rolgal