##// END OF EJS Templates
***
ralonso -
r37:38
parent child
Show More
@@ -1,496 +1,514
1 1 # -*- coding: utf-8 -*-
2 2
3 3 """
4 4 Module implementing MainWindow.
5 5 """
6 6
7 7 from PyQt4.QtGui import QMainWindow
8 8 from PyQt4.QtCore import pyqtSignature
9 9 from Ui_MainWindow import Ui_MainWindow
10 10 from PyQt4 import QtGui
11 11 from subprocess import *
12 12 import sys
13 13 import os
14 14 import subprocess
15 15 import commands
16 16
17 17 class MainWindow(QMainWindow, Ui_MainWindow):
18 18 """
19 19 Class documentation goes here.
20 20 """
21 21
22 22 def __init__(self, parent = None):
23 23 QMainWindow.__init__(self, parent)
24 24 self.setupUi(self)
25 25 self.setupUi2()
26 26
27 27 #redirige salida estandar
28 28 sys.stdout = self
29 29
30 30
31 31 def setupUi2(self):
32 32 """
33 33 Se usa para inicializar ciertos parametros para pruebas
34 34 """
35 35 self.txtDpath.setText('/home/ricardoar/optional/STORAGE/Data/RAW_EXP/JASMET/')
36 self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba1_jro_backup_manager')
36 self.txtRpath.setText('/home/ricardoar/optional/STORAGE/prueba1_jro_backup_manager/')
37 37 self.txtElabel.setText('JASMET')
38 38 self.statusDpath = True
39 39 self.statusRpath = True
40 self.var_n_files=0
40 41 # self.statusDpath = False
41 42 # self.statusRpath = False
42 43
43 44
44 45 #
45 46 #Deteccion de los dispositvos de grabacion
46 47 #
47 48 #var_cmd="wodim --devices | grep /dev/ | awk -F\' '{print $2}'" #Funciona en consola pero no en python ΒΏ?
48 49 var_cmd="wodim --devices | grep /dev/ | awk '{print $2}' | awk -F= '{print $2}'"
49 50 var_output = commands.getstatusoutput(var_cmd)
50 51 if var_output[0] != 0:
51 52 self.txtInfo.setText("No se pudo encontrar los dispositivos de grabacion, output_error:" + str(var_output))
52 53 else:
53 54 self.txtInfo.append("dispositivos encontrados")
54 55 var_devices = var_output[1].split('\n')
55 56
56 57 var_tmp=[]
57 58 for i in range(0, 4):
58 59 if i < len(var_devices):
59 60 var_len = len(var_devices[i])
60 61 var_tmp.append(var_devices[i][1:var_len - 1])
61 62 else:
62 63 var_tmp.append('')
63 64
64 65 #Se escriben los dispostivos correspodientes, si existen
65 66 self.txtDeviceA.setText(str(var_tmp[0]))
66 67 self.txtDeviceB.setText(str(var_tmp[1]))
67 68 self.txtDeviceC.setText(str(var_tmp[2]))
68 69 self.txtDeviceD.setText(str(var_tmp[3]))
69 70 #Se desactivan los que no existen
70 71 if len(var_tmp[0]) == 0 :
71 72 self.chkDevA.setChecked(False)
72 73 self.chkDevA.setEnabled(False)
73 74 if len(var_tmp[1]) == 0 :
74 75 self.chkDevB.setChecked(False)
75 76 self.chkDevB.setEnabled(False)
76 77 if len(var_tmp[2]) == 0 :
77 78 self.chkDevC.setChecked(False)
78 79 self.chkDevC.setEnabled(False)
79 80 if len(var_tmp[3]) == 0 :
80 81 self.chkDevD.setChecked(False)
81 82 self.chkDevD.setEnabled(False)
82 83
83 84
84 85 def write(self, txt):
85 86 """
86 87 Escribe la salida estandar eb txtInfo
87 88 """
88 89 self.txtInfo.append(str(txt))
89 90
90 91
91 92 @pyqtSignature("")
92 93 def on_btnDpath_clicked(self):
93 94 """
94 95 Permite seleccionar graficamente el direcorio de los datos a grabar
95 96 """
96 97 var_Dpath= QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
97 98 self.txtDpath.setText(var_Dpath)
98 99
99 100 #llamada a funcion
100 101 self.on_txtDpath_editingFinished()
101 102
102 103
103 104 @pyqtSignature("")
104 105 def on_btnRpath_clicked(self):
105 106 """
106 107 Permite seleccionar graficamente el direcorio del proyecto
107 108 """
108 109 var_Rpath = QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)
109 110 self.txtRpath.setText(var_Rpath)
110 111
111 112 #llamada a funcion
112 113 self.on_txtRpath_editingFinished()
113 114
114 115
115 116 @pyqtSignature("")
116 117 def on_txtDpath_editingFinished(self):
117 118 """
118 119 Permite buscar los archivos de extension seleccionada en la ruta de de datos
119 120 y cargar los valores para el rango de tiempo a ser grabado
120 121 """
121 122
122 123 #Usando el modulo "subprocess", eric4 pide seleccion del tipo de subproceso (padre o hijo)
123 124 #por ello se prefiere usar el modulo "commands"
124 125 #p1= Popen(['find', var_Dpath, '-name', '*.r'], stdout=PIPE)
125 126 #p2= Popen(['awk', '-F/', '{print substr($NF,2,7)}'], stdin=p1.stdout, stdout=PIPE)
126 127 #output_p2= p2.communicate()[0]
127 128 #self.txtInfo.setText(output_p2)
128 129
129 130 #Se carga la variable con la ruta de datos
130 131 var_Dpath=self.txtDpath.text()
131 132
132 133 #Se verifica que la ruta exista y sea un directorio
133 134 var_cmd="test -d "+str(var_Dpath)
134 135 var_output=commands.getstatusoutput(var_cmd)[0]
135 136 if var_output != 0:
136 137 self.statusDpath = False
137 138 self.txtInfo.setText("Ruta no valida, output_error:" + str(var_output))
138 139 return
139 140 else:
140 141 self.statusDpath = True
141 142 self.txtInfo.append("Ruta valida, sin error:" + str(var_Dpath))
142 143
143 144 #Se buscan los archivos del tipo especificado
144 145 var_Dtype=self.txtDtype.text()
145 146 var_cmd="find " + str(var_Dpath) + " -name *."+ str(var_Dtype) +" | awk -F/ '{print substr($NF,2,7)}' | sort| uniq"
146 147 output_p2=commands.getstatusoutput(var_cmd)[1]
147 148
148 149 #Se cargan las listas para seleccionar StartDay y StopDay (QComboBox)
149 150 self.var_list=[]
150 151 for i in range(0, (len(output_p2)+1)/8):
151 152 self.var_list.append(output_p2[8*i:8*(i+1)-1])
152 153
153 154 self.lstStartDay.clear()
154 155 self.lstStopDay.clear()
155 156
156 157 for i in self.var_list:
157 158 self.lstStartDay.addItem(i)
158 159 self.lstStopDay.addItem(i)
159 160
160 161 self.lstStopDay.setCurrentIndex(self.lstStartDay.count()-1)
161 162
162 163
163 164 @pyqtSignature("")
164 165 def on_txtRpath_editingFinished(self):
165 166 """
166 167 Valida la ruta del proyecto
167 168 """
168 169 #Se carga la variable con la ruta del proyecto
169 170 var_Rpath=self.txtRpath.text()
170 171
171 172 #Se verifica que la ruta exista y sea un directorio
172 173 var_cmd="test -d "+str(var_Rpath)
173 174 var_output=commands.getstatusoutput(var_cmd)[0]
174 175 if var_output != 0:
175 176 self.statusRpath = False
176 177 self.txtInfo.append("Ruta no valida, output_error:" + str(var_output))
177 178 return
178 179 else:
179 180 self.statusRpath = True
180 181 self.txtInfo.append("Ruta valida, sin error:" + str(var_Rpath))
181 182
182 183
183 184 @pyqtSignature("int")
184 185 def on_lstDtype_activated(self, index):
185 186 """
186 187 Permite elegir entre los tipos de archivos
187 188 """
188 189 if index == 0:
189 190 var_type='r'
190 191 elif index == 1:
191 192 var_type='pdata'
192 193 elif index == 2:
193 194 var_type='sswma'
194 195
195 196 if index != 3:
196 197 self.txtDtype.setText(var_type)
197 198 self.txtDtype.setReadOnly(True)
198 199 self.on_txtDpath_editingFinished()
199 200 else:
200 201 self.txtDtype.setText('')
201 202 self.txtDtype.setReadOnly(False)
202 203
203 204
204 205 @pyqtSignature("")
205 206 def on_txtDtype_editingFinished(self):
206 207 """
207 208 Se activa cuando el tipo de archivo es ingresado manualmente
208 209 """
209 210 #llamada a funcion
210 211 self.on_txtDpath_editingFinished()
211 212
212 213
213 214 @pyqtSignature("int") #CLOSED
214 215 def on_lstStartDay_activated(self, index):
215 216 """
216 217 Cambia la lista de opciones en lstStopDay
217 218 """
218 219 var_StopDay_index=self.lstStopDay.count() - self.lstStopDay.currentIndex()
219 220 self.lstStopDay.clear()
220 221
221 222 for i in self.var_list[index:]:
222 223 self.lstStopDay.addItem(i)
223 224
224 225 self.lstStopDay.setCurrentIndex(self.lstStopDay.count() - var_StopDay_index)
225 226
226 227
227 228 @pyqtSignature("int") #CLOSED
228 229 def on_lstStopDay_activated(self, index):
229 230 """
230 231 Cambia la lista de opciones en lstStartDay
231 232 """
232 233 var_StartDay_index=self.lstStartDay.currentIndex()
233 234 var_end_index = self.lstStopDay.count() - index
234 235 self.lstStartDay.clear()
235 236
236 237 for i in self.var_list[:len(self.var_list) - var_end_index + 1]:
237 238 self.lstStartDay.addItem(i)
238 239
239 240 self.lstStartDay.setCurrentIndex(var_StartDay_index)
240 241
241 242
242 243 @pyqtSignature("int") #CLOSED
243 244 def on_lstDcapacity_activated(self, index):
244 245 """
245 246 Permite elegir el tamaΓ±o del disco
246 247 """
247 248 if index == 0:
248 249 var_size=25.0
249 250 elif index == 1:
250 251 var_size=8.5
251 252 elif index == 2:
252 253 var_size=4.7
253 254 elif index == 3:
254 255 var_size=0.7
255 256
256 257 if index != 4:
257 258 self.txtDcapacity.setText(str(var_size*10**9/1024**2))
258 259 self.txtDcapacity.setReadOnly(True)
259 260 else:
260 261 self.txtDcapacity.setText('')
261 262 self.txtDcapacity.setReadOnly(False)
262 263
263 264
264 265 @pyqtSignature("")
265 266 def on_btnGbkp_clicked(self):
266 267 """
267 268 Cuando se presiona el boton btnGbkp
268 269 """
269 270
270 271 #Verifica que las rutas sean validas
271 272 if self.statusDpath == False or self.statusRpath == False:
272 273 if self.statusDpath == False:
273 274 self.txtInfo.append("Ruta de datos no valida")
274 275 if self.statusRpath == False:
275 276 self.txtInfo.append("Ruta de proyecto no valida")
276 277 return
277 278
278 279 #Crea las carpetas en la ruta del proyecto y verifica que se crearon correctamente
279 280 var_Rpath=self.txtRpath.text()
280 281 var_dirs='/{gpath,iso,ppath}'
281 282 var_cmd="mkdir -p "+str(var_Rpath)+str(var_dirs)
282 283 var_output=commands.getstatusoutput(var_cmd)[0]
283 284 if var_output != 0:
284 285 self.txtInfo.append("No se pudieron crear los directorios, output_error:" + str(var_output))
285 286 return
286 287 else:
287 288 self.txtInfo.append('Carpetas creadas correctamente')
288 289
289 290 #Cargando variables con los parametros
290 291 var_Dpath=self.txtDpath.text()
291 292 var_Rpath=self.txtRpath.text()
292 293 var_Rpath_ppath=var_Rpath+"/ppath" #Ruta de los archivos a grabar
293 294 var_sublist=[]
294 295 for i in self.var_list[self.lstStartDay.currentIndex():self.lstStartDay.currentIndex() + self.lstStopDay.currentIndex()+1]:
295 296 var_sublist.append(i)
296 297 if len(var_sublist) == 0:
297 298 self.txtInfo.append("No existen archivos encontrados")
298 299 return
299 300 #self.txtInfo.append('elementos: '+str(len(var_sublist)))
300 301
301 302
302 303 var_Dtype=self.txtDtype.text()
303 304 var_Dcapacity=float(self.txtDcapacity.text())*1024 #tamaΓ±o en KB
304 305
305 306 #Busca los archivos con los parametros de busqueda
306 307 var_files_list=[]
307 308 for var_doy in var_sublist:
308 309 var_cmd="find " + str(var_Dpath) + " -name ?"+var_doy+"???."+ str(var_Dtype) + " |sort"
309 310 var_output=commands.getstatusoutput(var_cmd)[1]
310 311 for var_file in var_output.split():
311 312 var_files_list.append(var_file) #Almacena cada archivo en la lista
312 313
313 314 #
314 315 #Genera la lista de archivos .dat que contienen los archivos a grabar en cada DVD
315 316 #
316 317 var_n=0 #Numero del DVD actual
317 318 var_tmp=0 #Se usa para acumulanr el tamaΓ±o de los archivos de la lista
318 319 var_files_list_2=[] #Se usa para almacenar la lista de archivos agrbar en cada DVD
319 320
320 321 for i in var_files_list: #Se asignan en i los archivos de la lista
321 322 var_size_i=os.path.getsize(i)/1024+1 #tamaΓ±o en KB del archivo de la lista, se suma 1 KB para evitar problemas al momento de sumar
322 323 var_tmp += var_size_i #Se acumulan el tamaΓ±o de los archivos de la lista
323 324
324 325 #Si el tamaΓ±o acumulado es mayor que el de el DVD
325 326 if var_tmp > var_Dcapacity:
326 327 var_tmp -= var_size_i #se quita el tamaΓ±o sumado para mostrar el tamaΓ±o real
327 328 #se agregan los ceros necesarios
328 329 if len(str(var_n)) < 4:
329 330 var_n2=""
330 331 for k in range(0, 4-len(str(var_n))):
331 332 var_n2 = var_n2+"0"
332 333 #se crea un archivo con numeral en el sufijo y extension .dat
333 334 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","w")
334 335 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
335 336 for line in var_files_list_2:
336 337 var_tmp_path=(line.split(var_Dpath)[1]).split('/')
337 338 var_tmp_path2="/"
338 339 for l in range(0, len(var_tmp_path)-1):
339 340 var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/"
340 341 var_file.write(var_tmp_path2+'=')
341 342 var_file.write(line+'\n')
342 343 var_file.close()
343 344
344 345 var_tmp = var_size_i #Se asigna a la variable el tamaΓ±o del archivo actual
345 346 var_files_list_2=[] #Se reinicia la lista
346 347 var_n += 1
347 348 var_files_list_2.append(i)
348 349
349 350 #se agregan los ceros necesarios
350 351 if len(str(var_n)) < 4:
351 352 var_n2=""
352 353 for k in range(0, 4-len(str(var_n))):
353 354 var_n2 = var_n2+"0"
354 355 #se crea un archivo con numeral en el sufijo y extension .dat
355 356 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","w")
356 357 #Se aΓ±ade la lista de archivos a grabar en el DVD al archivo .dat
357 358 for line in var_files_list_2:
358 359 var_tmp_path=(line.split(var_Dpath)[1]).split('/')
359 360 var_tmp_path2="/"
360 361 for l in range(0, len(var_tmp_path)-1):
361 362 var_tmp_path2=var_tmp_path2+str(var_tmp_path[l])+"/"
362 363 var_file.write(var_tmp_path2+'=')
363 364 var_file.write(line+'\n')
364 365 var_file.close()
365 366
366 367 #
367 #Genera los archivos postscript
368 #Genera los archivos .print con los cuales se creara los postscript
368 369 #
369 var_n_files = var_n # Numero del ultimo archivo .dat creado
370 self.var_n_files = var_n # Numero del ultimo archivo .dat creado
370 371 var_n = 0 # Se reinicia a cero y se usa para poder acceder a cada una de los archivos
371 372
372 373 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .ps
373 for var_n in range(0, var_n_files+1):
374 for var_n in range(0, self.var_n_files+1):
374 375 print var_n
375 376
376 377 #se agregan los ceros necesarios
377 378 if len(str(var_n)) < 4:
378 379 var_n2=""
379 380 for k in range(0, 4-len(str(var_n))):
380 381 var_n2 = var_n2+"0"
381 382 #se abren los archivos .dat en modo lectura
382 383 var_file = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat","r")
383 384 lines=var_file.readlines() # Se lee las lineas en el archivo y se almacenan en la lista
384 385
386 # Se crea el archivo .print
387 var_file_print = open(var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".print","w")
388 var_file_print.write(self.txtElabel.text()+" "+str(var_n2)+str(var_n)+"/"+str(self.var_n_files)+"\n")
389 var_file_print.write("Year Doy Folder Set Time range\n")
390
385 391 #Se crean los archivos .print con los cuales se crearan los archivos .ps
386 392 var_first_folder = lines[0].split('=')[0]
387 393 var_first_file = (lines[0].split('=')[1])[:-1]
388 394 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
389 395
390 396 for j in range(1, len(lines)-1):
391 397 var_tmp_folder = lines[j].split('=')[0]
392 398 var_tmp_file = (lines[j].split('=')[1])[:-1]
393
394 399
395 400 # Si el subfolder superior o la fecha del archivo cambia se genera una nueva linea
396 401 if (var_tmp_folder != var_first_folder) or (var_tmp_file[0:-5] != var_first_file[0:-5]):
397 402
398 403 var_last_file = (lines[j-1].split('=')[1])[:-1]
399 404 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
400 405 # Si el archivo se grabara directamente en la / del DVD y no en un /directorio/
401 406 # se usa la etiqueta para indicar la parte de la etiqueta donde va el subdirectorio
402 407 if var_first_folder == '/':
403 408 var_folder = self.txtElabel.text()
404 409 else:
405 410 var_folder = var_first_folder.split('/')[1]
406 print "Year Doy Folder Set Time range"
407 print var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" "\
408 +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file
411
412 var_file_print.write(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" "
413 +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file+"\n")
409 414
410 415 var_first_folder = lines[j].split('=')[0]
411 416 var_first_file = (lines[j].split('=')[1])[:-1]
412 417 var_date_first_file=commands.getstatusoutput("date -r "+var_first_file+" +'%T'")[1]
413 418
414 419 var_last_file = (lines[-1].split('=')[1])[:-1]
415 420 var_date_last_file=commands.getstatusoutput("date -r "+var_last_file+" +'%T'")[1]
416 421
417 422 if var_first_folder == '/':
418 423 var_folder = self.txtElabel.text()
419 424 else:
420 425 var_folder = var_first_folder.split('/')[1]
421
422 print "Year Doy Folder Set Time range"
423 print var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" "\
424 +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file
425
426
426
427 var_file_print.write(var_first_file[-12:-8]+" "+var_first_file[-8:-5]+" "+var_folder +" "+var_first_file[-5:-2]+" "
428 +var_last_file[-5:-2]+" "+var_date_first_file+" "+var_date_last_file+"\n")
429
430 var_file.close()
431 var_file_print.close()
427 432
428 433
429 434 #Se deshabilita el Tab Parameters y el boton btnGbkp
430 435 self.tabParameters.setEnabled(False)
431 436 self.btnGbkp.setEnabled(False)
432 437
433 438
434 439 @pyqtSignature("")
435 440 def on_btnStartburn_clicked(self):
436 441 """
437 442 Slot documentation goes here.
438 443 """
439 444 sys.stdout = self
440 445 #sys.stderr = self
441 446 print "stdout_!!!"
447
448 #Inicializando variables
442 449 var_Rpath=self.txtRpath.text()
443 450 var_Rpath_ppath=var_Rpath+"/ppath"
444 451 var_Rpath_iso=var_Rpath+"/iso"
445
446 452 var_label=self.txtElabel.text()
447 453
448 file_iso=var_Rpath_iso+'/2.iso'
449 file_dat=var_Rpath_ppath+'/EW_DRIFTS_1.dat'
450
451 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
452 var_cmd += ' -A '+var_label+' -V '+var_label
453 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
454 self.txtInfo.append(var_cmd)
455
456 #var_output=commands.getstatusoutput(str(var_cmd))[1]
457 #self.txtInfo.append(var_output)
454
455
456 # Se leen todos los archivos .dat creados para crear las etiquetas en los archivos .ps
457 for var_n in range(0, self.var_n_files+1):
458 print var_n
459
460 #se agregan los ceros necesarios
461 if len(str(var_n)) < 4:
462 var_n2=""
463 for k in range(0, 4-len(str(var_n))):
464 var_n2 = var_n2+"0"
465
466 file_iso=var_Rpath_iso+"/"+var_n2+str(var_n)+".iso"
467 file_dat=var_Rpath_ppath+"/"+self.txtElabel.text()+"_"+str(var_n2)+str(var_n)+".dat"
468
469 var_cmd = 'genisoimage -hide-joliet-trans-tbl -joliet-long -r '
470 var_cmd += ' -A '+var_label+' -V '+var_label
471 var_cmd += ' -graft-points -path-list '+ file_dat+' -o '+file_iso
472 self.txtInfo.append(var_cmd)
473
474 var_output=commands.getstatusoutput(str(var_cmd))[0]
475 self.txtInfo.append(str(var_output))
458 476
459 477 #os.system(str(var_cmd))
460 478 #p = subprocess.Popen(str('ls /'), shell=True, stdout=self)
461 479 #os.waitpid(p.pid, 0)
462 480 ####self.txtInfo.append(str(p.pid))
463 481
464 482
465 483
466 484 @pyqtSignature("")
467 485 def on_btnRestart_clicked(self):
468 486 """
469 487 Slot documentation goes here.
470 488 """
471 489 self.tabParameters.setEnabled(True)
472 490 self.btnGbkp.setEnabled(True)
473 491
474 492 @pyqtSignature("")
475 493 def on_btnTdevA_clicked(self):
476 494 var_dev = str(self.txtDeviceA.text())
477 495 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
478 496 commands.getstatusoutput(var_cmd)
479 497
480 498 @pyqtSignature("")
481 499 def on_btnTdevB_clicked(self):
482 500 var_dev = str(self.txtDeviceB.text())
483 501 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
484 502 commands.getstatusoutput(var_cmd)
485 503
486 504 @pyqtSignature("")
487 505 def on_btnTdevC_clicked(self):
488 506 var_dev = str(self.txtDeviceC.text())
489 507 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
490 508 commands.getstatusoutput(var_cmd)
491 509
492 510 @pyqtSignature("")
493 511 def on_btnTdevD_clicked(self):
494 512 var_dev = str(self.txtDeviceD.text())
495 513 var_cmd = 'eject ' + var_dev + '; eject -t ' + var_dev
496 514 commands.getstatusoutput(var_cmd)
General Comments 0
You need to be logged in to leave comments. Login now