SHARE
TWEET

PracticaFSO1def

a guest Jun 19th, 2017 47 in 26 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from Tkinter import *
  5. import tkFileDialog
  6. import os
  7. import shutil
  8. import fnmatch
  9. import tkSimpleDialog
  10. import tkMessageBox
  11. import subprocess
  12. import time
  13. import ScrolledText
  14. #------------------------------------------------------------------------------------
  15. #MÉTODOS
  16.  
  17.  
  18.  
  19.  
  20. #metode per seleccionar el directori
  21. def seleccionarDir():
  22.     carpeta = tkFileDialog.askdirectory(title='Escollir directori de traball')
  23.     directorio.configure(state="normal")
  24.     directorio.delete(0,END)
  25.     directorio.insert(0,carpeta)
  26.     directorio.configure(state="disable")   #Ponemos su estado en desabilitado para evitar que el usuario no pueda modificarlo en panatalla.
  27.                                             #carpeta = path absoluto de la carpeta seleccionada
  28.    
  29.  
  30. #metode per obrir script, utilitzem la comanda options['filetypes'] per filtrar entre directoris i archius 'sh'
  31. def obrirG(archivo):
  32.     path = directorio.get()
  33.     global file
  34.    
  35.     if(path!=''):
  36.         options = {}
  37.         options['filetypes'] = [('Archius Script','.sh')]
  38.         options['initialdir'] = path
  39.         try:
  40.             file=tkFileDialog.askopenfilename(**options)        #file agafa el valor de la direccio del path, com que es global serveix per a tot el programa
  41.            
  42.             ruta2 = directorio.get()
  43.             if(ruta2==path):
  44.                 aux=archivos.get()
  45.                 archivos.delete('0',END)                        #Eliminar anterior archiu seleccionat en el ENTRY
  46.                 archivos.insert(INSERT, file.split('/')[-1])    #Quedar-me amb el nom del archiu que estic utilitzant.
  47.                 Archiu=open(file,'r').read()
  48.                 lista.delete("0.0", END)
  49.                 lista.insert(END, Archiu)                       #inserció del contingut de l'archiu.
  50.                
  51.         except IOError:
  52.             pass
  53.     else:tkMessageBox.showwarning("ERROR","Es necesari escollir un direcotir primer")          
  54.        
  55.  
  56. def obrirS():
  57.     obrirG(archivos.get())
  58.  
  59.  
  60.    
  61.  
  62.  
  63. #Metode per guardar l'arxiu actual, la direcció d'aquest esta guardada a la variable global file,
  64. #obtenim el contingut que hem modificat o no en pantalla i el tornem a escriure en l'archiu
  65. def guardarS():
  66.     if(archivos.get()!=''):
  67.         Archiu=lista.get('1.0',END)         #contingut del archiu a guardar
  68.         open(file,'w').write(Archiu)        #obrir el "file (direccio de l'archiu )" en mode escriptura y escriure el nou contingut
  69.     else:
  70.         tkMessageBox.showwarning("ERROR","Selecciona un directori / Script a guardar")
  71.  
  72.  
  73.  
  74. #Metode per guardar l'informació d'un script en un nou archiu.sh. Per realitzar aquesta
  75. #operacio hem utilitzat un altre cop la funcionalitat options[filetypes], pero en aquest cas
  76. #hem utilitzat la comanda 'asksaveasfilename' per aconseguir el nom amb el que guardar el nou archiu
  77. def guardarN():
  78.     file=directorio.get()
  79.     if(file!=''):
  80.         options = {}
  81.         options['filetypes'] = [('Archius Script','.sh')]
  82.         file2=tkFileDialog.asksaveasfilename(**options) #File2 = ruta a on es guardará el nou archiu
  83.         if(file2!=''):
  84.          Archiu=lista.get('1.0',END)
  85.          open(file2,'w').write(Archiu)                  #obrir un nou archiu amb mode escritura, en aquest guardem tota l'informacio que hi ha en la "llista"
  86.     else:
  87.         tkMessageBox.showwarning("Compte","Selecciona un directori")
  88.    
  89.    
  90.    
  91.  
  92. def runn():
  93.     try:
  94.         if(archivos.get()==''):
  95.             tkMessageBox.showwarning("Error","No hi ha script seleccionat")
  96.         else:
  97.             os.chmod(directorio.get()+'/'+archivos.get(), 0755) #donar permisos d'execució als scripts ???
  98.             a = argumentos.get()
  99.             s = directorio.get()+'/'+archivos.get()
  100.             fitx = s
  101.             if (a!=''):
  102.                 s = s+" "+a
  103.             if (out.get()):
  104.                 s = s+" > "+fitx[:-2]+"out"
  105.             if (err.get()):
  106.                 s = s+" 2> "+fitx[:-2]+"err"
  107.             os.system(s)
  108.             #print s
  109.        
  110.     except IOError:
  111.             tkMessageBox.showwarning("Error","No s'ha trobat el fitxer o directori")
  112.             pass
  113.     except OSError:
  114.             tkMessageBox.showwarning("Error","Obre un script o indica'n el path")
  115.             pass
  116.  
  117.  
  118. #metode per veure la sortida d'error
  119. def vstderr():
  120.        
  121.         archivo = archivos.get()[:-3]
  122.         path = directorio.get()
  123.         if((path == '') | (archivo =='')):
  124.             tkMessageBox.showwarning("Compte","No has seleccionat ruta")
  125.         else:
  126.             try:
  127.                 path = directorio.get()
  128.                 archivo = archivos.get()[:-3]
  129.                 window2 = Toplevel(ventana)
  130.                 window2.title("STERR")
  131.                 salidaerr = open(path+"/"+archivo+".err",'r').read()
  132.                 list22=ScrolledText.ScrolledText(window2)
  133.                 list22.pack()
  134.                 list22.focus_set()
  135.                 list22.insert('1.0',salidaerr)
  136.             except IOError:
  137.                     window2.destroy()
  138.                     tkMessageBox.showwarning("Compte","El fitxer '.err' no ha sigut generat")
  139.                     pass
  140.    
  141.  
  142. #metode per veure la sortida standard
  143. def vstdout():
  144.         archivo = archivos.get()[:-3]
  145.         path = directorio.get()
  146.         if((path == '') | (archivo =='')):
  147.             tkMessageBox.showwarning("Compte","No has seleccionat ruta")
  148.         else:
  149.             try:
  150.                 path = directorio.get()
  151.                 archivo = archivos.get().split('.')[0]
  152.                 window = Toplevel(ventana)
  153.                 window.title("STDOUT")
  154.                 salidaout = open(path+"/"+archivo+".out",'r').read()
  155.                 list22=ScrolledText.ScrolledText(window)
  156.                 list22.pack()
  157.                 list22.focus_set()
  158.                 list22.insert('1.0',salidaout)
  159.             except IOError:
  160.                     window.destroy()
  161.                     tkMessageBox.showwarning("Compte","El fitxer '.out' no ha sigut generat")
  162.                     pass
  163.  
  164.    
  165. def attime():
  166.    
  167.     path=directorio.get()
  168.     archivo=archivos.get()
  169.     horaa=hora7.get()
  170.     if((path == '') | (archivo =='') | (len(horaa)<1) | (len(horaa)<2) | (len(horaa)<3) | (len(horaa)<4)):
  171.             tkMessageBox.showwarning("Compte","Selecciona ruta \nO posa be hora")
  172.     else:
  173.         comanda=path+"/"+archivo
  174.         comm = comanda
  175.         if (argumentos.get() != ''):
  176.             comm = comm+' '+argumentos.get()
  177.         if out.get():
  178.             comm = comm+" > "+comanda[:-3]+".out"
  179.         if err.get():
  180.             comm = comm+' 2> '+comanda[:-3]+".err"
  181.         try:
  182.             a=horaa[0] #Casteos para comprobar que el valor que tiene cada posicion del string hora es numerico
  183.             if(a==''):
  184.                 tkMessageBox.showwarning("Error","Format incorrecte")
  185.             else:
  186.                 a=int(a)
  187.                 if(a>=3):
  188.                     tkMessageBox.showwarning("Error","Hora incorrecta")
  189.                 else:
  190.                     b=horaa[1]
  191.                     if(b==''):
  192.                         tkMessageBox.showwarning("Error","Format incorrecte")
  193.                     else:
  194.                         b=int(b)
  195.                         c=horaa[2]
  196.                         if(c!=':'):
  197.                             tkMessageBox.showwarning("Error","Format incorrecte")
  198.                         else:
  199.                             d=horaa[3]
  200.                             if(d==''):
  201.                                 tkMessageBox.showwarning("Error","Format incorrecte")
  202.                             else:
  203.                                 d=int(d)
  204.                                 if(d>=6):
  205.                                     tkMessageBox.showwarning("Error","Minut incorrecte")
  206.                                 else:
  207.                                     f=horaa[4]
  208.                                     if(f==''):
  209.                                         tkMessageBox.showwarning("Error","Format incorrecte")
  210.                                     else:
  211.                                         f=int(f)
  212.              
  213.                                     if(len(horaa)>5):
  214.                                         tkMessageBox.showwarning("Error","Format incorrecte")
  215.                                     else:
  216.                                         os.chmod(comanda,0755)
  217.                                         os.system('echo "'+comm+'" | at '+horaa)
  218.         except ValueError:
  219.             tkMessageBox.showwarning("Error","Format incorrecte")
  220.         except SyntaxError:
  221.             tkMessageBox.showwarning("Error","Format incorrecte")
  222.    
  223. def crontime():
  224.     path=directorio.get()
  225.     archivo=archivos.get()
  226.     if((path == '') | (archivo =='')):
  227.             tkMessageBox.showwarning("Compte","No has seleccionat ruta")
  228.     else:
  229.         comanda=path+"/"+archivo
  230.        
  231.         minuto=min6.get()
  232.         if minuto=='':
  233.             min6.insert('1','*')
  234.             minuto = '*'
  235.         horaa=hora6.get()
  236.         if horaa=='':
  237.             hora6.insert('1','*')
  238.             horaa = '*'
  239.         diames=dm6.get()
  240.         if diames=='':
  241.             dm6.insert('1','*')
  242.             diames = '*'
  243.         mes=mes6.get()
  244.         if mes=='':
  245.             mes6.insert('1','*')
  246.             mes = '*'
  247.         diasem=ds6.get()
  248.         if diasem=='':
  249.             ds6.insert('1','*')
  250.             diasem = '*'
  251.    
  252.         comm=minuto+" "+horaa+' '+diames+' '+mes+' '+diasem
  253.         comm = comm+' '+comanda+' '+argumentos.get()
  254.         if out.get():
  255.             comm = comm+" > "+comanda[:-3]+".out"
  256.         if err.get():
  257.             comm = comm+' 2> '+comanda[:-3]+".err"
  258.         try:
  259.             if(minuto!='*'):
  260.                 minuto=int(minuto)
  261.                
  262.             if(horaa!='*'):
  263.                 horaa=int(horaa)
  264.                        
  265.             if(diames!='*'):
  266.                 diames=int(diames)
  267.             if(mes!='*'):
  268.                 mes=int(mes)
  269.             if(diasem!='*'):
  270.                 diasem=int(diasem)
  271.             os.chmod(comanda,0755)
  272.             os.system('(crontab -l ; echo "'+comm+'") | crontab -')
  273.         except ValueError:
  274.             tkMessageBox.showwarning("Error","Format no admés per el crontab")
  275.    
  276.  
  277. def sleeep():
  278.     path=directorio.get()
  279.     archivo=archivos.get()
  280.     if((path == '') | (archivo =='')):
  281.             tkMessageBox.showwarning("Compte","No has seleccionat ruta")
  282.     else:
  283.         path=directorio.get()
  284.         archivo=archivos.get()
  285.         segundos=seg79.get()
  286.         try:
  287.             segundos=int(segundos) #comprobar que sea un valor númerico
  288.             comanda2=path+'/'+archivo
  289.             ahora = time.strftime("%c")
  290.         #print "Hora " + time.strftime("%X")
  291.             subprocess.call('echo $(sleep "{}"; "{}" "{}") &'.format(segundos, comanda2, argumentos.get()), shell=True)
  292.         except ValueError:
  293.             tkMessageBox.showwarning("Error","Format no numeric")
  294.            
  295.         #print "Hora " + time.strftime("%X")
  296.    
  297.    
  298.    
  299.    
  300.    
  301.  
  302. #------------------------------------------------------------------------------------          
  303.  
  304. #Creacion de la ventana principal MAIN
  305. ventana=Tk()
  306. ventana.title("Execució d'escripts en el temps")
  307. ventana.minsize(600,600)
  308.  
  309. #------------------------------------------------------------------------------------
  310.  
  311. #Creacion de los frames principales (Arriba, medio, abajo)
  312.  
  313. #Frame 1
  314. f1=Frame()
  315. f1.configure()
  316. f1.pack(side=TOP,fill=X)
  317.  
  318. #Frame 2
  319. f2=Frame()
  320. f2.configure()
  321. f2.pack(side=TOP, fill=X)
  322.  
  323. #Frame 3
  324. f3=Frame()
  325. f3.configure()
  326. f3.pack(side=TOP,fill=X)
  327.  
  328. #Frame 4
  329. f4=Frame()
  330. f4.configure()
  331. f4.pack(expand=TRUE,fill=BOTH,side=TOP)
  332.  
  333. #Frame 50
  334. f50=Frame()
  335. f50.configure()
  336. f50.pack(side=BOTTOM,fill=X)
  337.  
  338. #Frame 10
  339. f10=Frame(f50)
  340. f10.configure()
  341. f10.pack(side=TOP,fill=X)
  342.  
  343. #Frame 9
  344. f9=Frame(f50)
  345. f9.configure()
  346. f9.pack(side=TOP,fill=X)
  347.  
  348. #Frame 8
  349. f8=Frame(f50)
  350. f8.configure()
  351. f8.pack(side=TOP,fill=X)
  352.  
  353. #Frame 79
  354. f79=Frame(f50)
  355. f79.configure()
  356. f79.pack(side=TOP,fill=X)
  357.  
  358. #Frame 7
  359. f7=Frame(f50)
  360. f7.configure()
  361. f7.pack(side=TOP,fill=X)
  362.  
  363. #Frame 6
  364. f6=Frame(f50)
  365. f6.configure()
  366. f6.pack(side=TOP,fill=X)
  367.  
  368. #Frame 5
  369. f5=Frame(f50)
  370. f5.configure()
  371. f5.pack(side=TOP,fill=X)
  372.  
  373.  
  374.  
  375.  
  376. #-----------------------------------------------------------------------------------
  377. #definición de los botones del frame 1
  378. f11=Frame(f1)
  379. f11.pack(fill=X)
  380.  
  381. #Boton 1, escoger directorio de trabajo
  382. cd=Button(f11,text='Escollir directori de traball', command=seleccionarDir)#añadir el comand de la acción
  383. cd.pack(side=LEFT)
  384. directorio=Entry(f11)
  385. directorio.configure(state="disable",disabledforeground='black')
  386. directorio.pack(side=LEFT,expand=TRUE,fill=X)      
  387. #-----------------------------------------------------------------------------------
  388. #definición de los botones del frame 2
  389. f21=Frame(f2)
  390. f21.pack(fill=X)
  391.  
  392. archivos=Entry(f21)
  393. archivos.configure()
  394. archivos.insert(0,'')
  395.  
  396. #Boton 21, abrir un script
  397. obrir=Button(f21, text='Obrir Script',command=obrirS)
  398. obrir.pack(side=LEFT)
  399.  
  400. archivos.pack(side=LEFT,expand=TRUE,fill=X)
  401.  
  402. #Boton 22, guardar cambios
  403. guarda=Button(f21, text='Guardar Script', command=guardarS)
  404. guarda.pack(side=RIGHT)
  405.  
  406.  
  407. #-----------------------------------------------------------------------------------
  408. #definición de los botones del frame 3
  409. f31=Frame(f3)
  410. f31.pack(fill=X)
  411.  
  412. #Boton 3, guardar copia en un script nou
  413. nou=Button(f31, text='Guardar en un nou script', command=guardarN)#añadir command
  414. nou.pack(side=LEFT)
  415.  
  416.  
  417. #-----------------------------------------------------------------------------------
  418. #Configuracion de la lista y scrollbar. 4
  419. scroll = Scrollbar(f4,orient=VERTICAL)
  420. lista = Text(f4,xscrollcommand=scroll.set)
  421. scroll.config(command=lista.yview)
  422. scroll.pack(side=RIGHT,fill=Y)
  423. lista.pack(side=TOP,expand=TRUE,fill=BOTH, anchor=W)
  424.  
  425.  
  426. #-----------------------------------------------------------------------------------
  427. #Boton 5, guardar copia en un script nou
  428. sortir=Button(f5, text='Sortir', command=quit)#añadir command
  429. sortir.pack(side=LEFT)
  430.  
  431.  
  432. #-----------------------------------------------------------------------------------
  433. #Boton 6, guardar copia en un script nou
  434. run3=Button(f6, text='Run', command=crontime)#añadir command
  435. run3.pack(side=RIGHT)
  436. ejecutarC1=Label(f6,text='  HH:MM  ')
  437. ejecutarC1.pack(side=RIGHT)
  438.  
  439.  
  440. ds6=Entry(f6,width=2)
  441. ds6.configure()
  442. ds6.insert(0,'*')
  443. ds6.pack(side=RIGHT)
  444.  
  445. mes6=Entry(f6,width=2)
  446. mes6.configure()
  447. mes6.insert(0,'*')
  448. mes6.pack(side=RIGHT)
  449.  
  450. dm6=Entry(f6,width=2)
  451. dm6.configure()
  452. dm6.insert(0,'*')
  453. dm6.pack(side=RIGHT)
  454.  
  455. hora6=Entry(f6,width=2)
  456. hora6.configure()
  457. hora6.insert(0,'*')
  458. hora6.pack(side=RIGHT)
  459.  
  460. min6=Entry(f6,width=2)
  461. min6.configure()
  462. min6.insert(0,'*')
  463. min6.pack(side=RIGHT,expand=FALSE)
  464.  
  465. ejecutarC3=Label(f6,text='Programa cada dia a les ')
  466. ejecutarC3.pack(side=RIGHT)
  467.  
  468.  
  469. #-----------------------------------------------------------------------------------
  470. #Boton 7, run at
  471. run2=Button(f7, text='Run', command=attime)
  472. run2.pack(side=RIGHT)
  473.  
  474. ejecutarA1=Label(f7,text='  HH:MM  ')
  475. ejecutarA1.pack(side=RIGHT)
  476.  
  477. hora7=Entry(f7,width=8)
  478. hora7.configure()
  479. hora7.insert(0,'HH:MM')
  480. hora7.pack(side=RIGHT)
  481.  
  482. ejecutarA3=Label(f7,text='Executa un cop a les ')
  483. ejecutarA3.pack(side=RIGHT)
  484.  
  485.  
  486. #-----------------------------------------------------------------------------------
  487. #Boton 79, run at
  488. run4=Button(f79, text='Run', command=sleeep)
  489. run4.pack(side=RIGHT)
  490.  
  491. ejecutarA1=Label(f79,text='  segons  ')
  492. ejecutarA1.pack(side=RIGHT)
  493.  
  494. seg79=Entry(f79,width=5)
  495. seg79.configure()
  496. seg79.insert(0,'')
  497. seg79.pack(side=RIGHT,expand=FALSE)
  498.  
  499. ejecutarA3=Label(f79,text="Executa d'aquí a ")
  500. ejecutarA3.pack(side=RIGHT)
  501.  
  502.  
  503. #-----------------------------------------------------------------------------------
  504. #Boton 8, run
  505. run1=Button(f8, text='Run', command=runn)#añadir command
  506. run1.pack(side=RIGHT)
  507. ejecutarI=Label(f8,text='Executa immediatament') #falta meter el comand del boton para Añadir funcionalidad
  508. ejecutarI.pack(side=RIGHT)
  509.  
  510.  
  511. #-----------------------------------------------------------------------------------
  512. #Boton 91, ver stderr
  513. verstderr=Button(f9, text='Veure Stderr', command=vstderr)#añadir command
  514. verstderr.pack(side=RIGHT)
  515.  
  516. #Boton 92, ver stdout
  517. verstdout=Button(f9, text='Veure Stdout', command=vstdout)#añadir command
  518. verstdout.pack(side=RIGHT)
  519.  
  520.  
  521. #-----------------------------------------------------------------------------------
  522. #Label f10
  523. input1=Label(f10,text="Arguments d'entrada: ")
  524. input1.pack(side=LEFT)
  525.  
  526. #Entrada argumento
  527. argumentos=Entry(f10)
  528. argumentos.configure()
  529. argumentos.insert(0,'')
  530. argumentos.pack(side=LEFT,expand=TRUE,fill=X)
  531.  
  532. err=IntVar()
  533. error = Checkbutton(f10, text="Genera Stderr", variable=err).pack(side=RIGHT)
  534. out = IntVar()
  535. salida = Checkbutton(f10, text="Genera Stdrout", variable=out).pack(side=RIGHT)
  536.  
  537.  
  538.  
  539.  
  540.  
  541. ventana.mainloop()
RAW Paste Data
Want to get better at Python?
Learn to code Python in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top