Guest User

Untitled

a guest
Jul 18th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.89 KB | None | 0 0
  1. import sys,socket,getopt,os,codecs,select
  2. def usage():
  3. print "uzycie"
  4. print "-h, --help pomoc"
  5. print "-f [opcja] otworz slownik z podanego pliku(domyslnie slownik.txt)"
  6. print "-e otworz plik w podanym kodowaniu"
  7.  
  8. def wczytaj(plik,kod):
  9. f=codecs.open(plik,"r",kod)
  10. dict1={}
  11. dict2={}
  12. for linia in f.readlines():
  13. print "zczytuje linie: "+linia
  14. slowo=linia.split(":")
  15. if len(slowo)==1:
  16. print "slowo jest ok"
  17. dict1[slowo[0].strip()]=""
  18. else:
  19. print "slowo nie jest ok"
  20. dict2[slowo[0]]=[slowo[1].strip()]
  21. f.close()
  22. return dict1,dict2
  23.  
  24. def zapisz_slownik(gdzie,kod,dict1,dict2):
  25. f=codecs.open(gdzie,"w",kod)
  26. for slowo in dict1:
  27. f.write(slowo.strip()+"\n")
  28. for slowo in dict2:
  29. f.write(slowo+":")
  30. for podpowiedz in dict2[slowo]:
  31. f.write(podpowiedz.strip()+"\n")
  32. f.close()
  33.  
  34.  
  35. opts, args=getopt.gnu_getopt(sys.argv[1:],"hf:e:",["help"])
  36. odczyt=False
  37. kodowanie="iso8859-2"
  38. plik="slownik.txt"
  39. for opt, arg in opts:
  40. if opt in("-h","--help"):
  41. usage()
  42. elif opt in "-f":
  43. odczyt=True
  44. print "wczytaj slownik z podanego pliku: "+arg
  45. plik=arg
  46. elif opt in "-e":
  47. kodowanie=arg
  48. print "odczyt z kodowaniem: "+arg
  49.  
  50. dict1,dict2=wczytaj(plik,kodowanie)
  51.  
  52. gniazdo=socket.socket()
  53. gniazdo.bind(('',int(sys.argv[1])))
  54. gniazdo.listen(5)
  55.  
  56. obiekty=[sys.stdin,gniazdo]
  57. zapytania={}
  58.  
  59. while True:
  60. do_obslugi,_,_=select.select(obiekty,[],[])
  61. for obiekt in do_obslugi:
  62. if obiekt==sys.stdin:
  63. komenda=sys.stdin.readline().strip()
  64. if komenda=="exit":
  65. zapisz_slownik(plik,kodowanie,dict1,dict2)
  66. for obiekt in obiekty:
  67. obiekt.close()
  68. sys.exit(0)
  69. elif komenda=="reload":
  70. zapisz_slownik(plik,kodowanie,dict1,dict2)
  71. else:
  72. sys.stderr.write("nieznana komenda")
  73. sys.exit(1)
  74. elif obiekt==gniazdo:
  75. klient,_=gniazdo.accept()
  76. obiekty.append(klient)
  77. zapytania[klient]=""
  78. else:#obsluga klienta
  79. dane=obiekt.recv(1024)
  80. if not dane:#klient nic nie wysyla
  81. del zapytania[obiekt]
  82. obiekty.remove[obiekt]
  83. obiekt.close()
  84. else:
  85. zapytania[obiekt]+=dane
  86. odebrane=zapytania[obiekt].split("\n")
  87. ile=0
  88. start="ok "
  89. odp=""
  90. zadanie=odebrane[0].split(' ')
  91. print zadanie
  92. print len(zadanie)
  93. if len(zadanie)!=3:
  94. sys.stderr.write("zbyt malo argumentow naglowka")
  95. start="error 0"
  96. obiekt.sendall(start)
  97. #del zapytania[obiekt]
  98. #obiekty.remove[obiekt]
  99. #obiekt.close()
  100. if zadanie[0]=="check":
  101. print "sprawdzam"
  102. for slowo in odebrane[1:]:
  103. if slowo in dict1:
  104. pass
  105. elif slowo in dict2:
  106. ile+=1
  107. odp+=slowo.strip()+":"
  108. for podpowiedz in dict2[slowo]:
  109. odp+=podpowiedz.strip()
  110. odp+="\n"
  111. else:
  112. ile+=1
  113. odp+=slowo.strip()+"\n"
  114. start+=str(ile)+"\n"
  115. start+=odp
  116. start=start.strip()
  117. print "odp: "+start
  118. print "wysylam"
  119. obiekt.sendall(start)
  120. print "wyslalem odp"
  121. elif zadanie[0]=="add":
  122. print "dodaje"
  123. for slowo in odebrane[1:]:
  124. s=slowo.split(":")
  125. if len(s)==1:
  126. if s[0] in dict1:
  127. pass
  128. else:
  129. dict1[slowo[0].strip()]=""
  130. elif len(s)==2:
  131. if s[0] in dict1:
  132. del dict1[s[0]]
  133. else:
  134. dict2[s[0]]=s[1].strip()
  135. start+=str(ile)
  136. start=start.strip()
  137. obiekt.sendall(start)
  138. else:
  139. sys.stderr.write("zly naglowek")
  140. start="error 0"
  141. obiekt.sendall(start)
  142.  
  143. del zapytania[obiekt]
  144. obiekty.remove(obiekt)
  145. obiekt.close()
  146. gniazdo.close()
Add Comment
Please, Sign In to add comment