Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys,socket,getopt,os,codecs,select
- def usage():
- print "uzycie"
- print "-h, --help pomoc"
- print "-f [opcja] otworz slownik z podanego pliku(domyslnie slownik.txt)"
- print "-e otworz plik w podanym kodowaniu"
- def wczytaj(plik,kod):
- f=codecs.open(plik,"r",kod)
- dict1={}
- dict2={}
- for linia in f.readlines():
- print "zczytuje linie: "+linia
- slowo=linia.split(":")
- if len(slowo)==1:
- print "slowo jest ok"
- dict1[slowo[0].strip()]=""
- else:
- print "slowo nie jest ok"
- dict2[slowo[0]]=[slowo[1].strip()]
- f.close()
- return dict1,dict2
- def zapisz_slownik(gdzie,kod,dict1,dict2):
- f=codecs.open(gdzie,"w",kod)
- for slowo in dict1:
- f.write(slowo.strip()+"\n")
- for slowo in dict2:
- f.write(slowo+":")
- for podpowiedz in dict2[slowo]:
- f.write(podpowiedz.strip()+"\n")
- f.close()
- opts, args=getopt.gnu_getopt(sys.argv[1:],"hf:e:",["help"])
- odczyt=False
- kodowanie="iso8859-2"
- plik="slownik.txt"
- for opt, arg in opts:
- if opt in("-h","--help"):
- usage()
- elif opt in "-f":
- odczyt=True
- print "wczytaj slownik z podanego pliku: "+arg
- plik=arg
- elif opt in "-e":
- kodowanie=arg
- print "odczyt z kodowaniem: "+arg
- dict1,dict2=wczytaj(plik,kodowanie)
- gniazdo=socket.socket()
- gniazdo.bind(('',int(sys.argv[1])))
- gniazdo.listen(5)
- obiekty=[sys.stdin,gniazdo]
- zapytania={}
- while True:
- do_obslugi,_,_=select.select(obiekty,[],[])
- for obiekt in do_obslugi:
- if obiekt==sys.stdin:
- komenda=sys.stdin.readline().strip()
- if komenda=="exit":
- zapisz_slownik(plik,kodowanie,dict1,dict2)
- for obiekt in obiekty:
- obiekt.close()
- sys.exit(0)
- elif komenda=="reload":
- zapisz_slownik(plik,kodowanie,dict1,dict2)
- else:
- sys.stderr.write("nieznana komenda")
- sys.exit(1)
- elif obiekt==gniazdo:
- klient,_=gniazdo.accept()
- obiekty.append(klient)
- zapytania[klient]=""
- else:#obsluga klienta
- dane=obiekt.recv(1024)
- if not dane:#klient nic nie wysyla
- del zapytania[obiekt]
- obiekty.remove[obiekt]
- obiekt.close()
- else:
- zapytania[obiekt]+=dane
- odebrane=zapytania[obiekt].split("\n")
- ile=0
- start="ok "
- odp=""
- zadanie=odebrane[0].split(' ')
- print zadanie
- print len(zadanie)
- if len(zadanie)!=3:
- sys.stderr.write("zbyt malo argumentow naglowka")
- start="error 0"
- obiekt.sendall(start)
- #del zapytania[obiekt]
- #obiekty.remove[obiekt]
- #obiekt.close()
- if zadanie[0]=="check":
- print "sprawdzam"
- for slowo in odebrane[1:]:
- if slowo in dict1:
- pass
- elif slowo in dict2:
- ile+=1
- odp+=slowo.strip()+":"
- for podpowiedz in dict2[slowo]:
- odp+=podpowiedz.strip()
- odp+="\n"
- else:
- ile+=1
- odp+=slowo.strip()+"\n"
- start+=str(ile)+"\n"
- start+=odp
- start=start.strip()
- print "odp: "+start
- print "wysylam"
- obiekt.sendall(start)
- print "wyslalem odp"
- elif zadanie[0]=="add":
- print "dodaje"
- for slowo in odebrane[1:]:
- s=slowo.split(":")
- if len(s)==1:
- if s[0] in dict1:
- pass
- else:
- dict1[slowo[0].strip()]=""
- elif len(s)==2:
- if s[0] in dict1:
- del dict1[s[0]]
- else:
- dict2[s[0]]=s[1].strip()
- start+=str(ile)
- start=start.strip()
- obiekt.sendall(start)
- else:
- sys.stderr.write("zly naglowek")
- start="error 0"
- obiekt.sendall(start)
- del zapytania[obiekt]
- obiekty.remove(obiekt)
- obiekt.close()
- gniazdo.close()
Add Comment
Please, Sign In to add comment