Autore Topic: Controllare esito SHELL  (Letto 1267 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Controllare esito SHELL
« il: 19 Gennaio 2010, 00:06:17 »
ciao raga

tramite shell eseguo delle copie di backup
Codice: [Seleziona]
SHELL ("cp -r " & origine & " " & destinazione)


la cartella di origine è sempre la stessa mentre la destinazione la scelgo con dialog.

ora vorrei fare un controllo su shell se ha effettuato la copia tipo

Codice: [Seleziona]
if shell ecc...  then  
  message("copia effettuata")
else
  message("errore sulla copia")
endif

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #1 il: 19 Gennaio 2010, 00:14:03 »
Devi usare i processi....

Codice: [Seleziona]
myprocess As Process

myprocess = SHELL "comando" FOR READ WRITE AS "myprocess"


Poi con un timer controli lo stato di myprocess..se è 0 allora vuol dire che l'operazione si è conclusa....

Ovviamente per ogni dubbio chiedi pure...

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #2 il: 19 Gennaio 2010, 14:32:04 »
Ceskho

fin qui la cosa mi è chiara.
con il timer?

se 0 è conclusa;
se c'è un errore?

quanto tempo devo lasciare attivo il timer?
in alternativa al timer non potrei utilizzare if?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #3 il: 19 Gennaio 2010, 15:25:07 »
Il timer lo lasci attivo sino a che il risultato di process è diverso da 0....dentro la sub del timer ci metterai un If che controlla lo stato di process...

Tieni presente che process restituisce 0 quando il processo è terminato e pertanto ti darà 0 sia se finisce bene che se finisce male....

Purtroppo se vuoi sostituire il timer lo puoi fare solo con un ciclo del tipo while ma non so se ti conviene perchè non so dirti se ti freeza tutta la gui...al massimo potresti provare...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #4 il: 19 Gennaio 2010, 17:14:50 »
per fare delle copie di file puoi usare il comando inteno di gambas "COPY" senza scomodare la shell per un compito così banale.
gambas ha una completa gamma di funzioni per gestire i file usiamole

(qualcuno addirittura crea le directory con shell!!)


http://gambasdoc.org/help/cat/file

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #5 il: 19 Gennaio 2010, 17:17:45 »
Citazione

fsurfing ha scritto:
(qualcuno addirittura crea le directory con schell!!)


...e ne vado fiero...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #6 il: 19 Gennaio 2010, 18:46:38 »
Citazione
Citazione:       fsurfing ha scritto:     (qualcuno addirittura crea le directory con schell!!)    ...e ne vado fiero...

ognuno fa quel che vuole ma se usi il terminale per certe azioni che potresti evitare facilmente si può sempre incappare in problemi, soprattutto se non si controlla l' output del comando lanciato, che potrebbe non andare a buon fine
per qualche motivo e gambas non se ne accorgerebbe se non indirettamente in un altra parte di codice del programma.

ps: cmq non mi riferivo a te se l' avessi saputo ti avrei chiamato in causa subito :)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #7 il: 22 Gennaio 2010, 13:06:01 »
Io farei così, se vuoi usare SHELL:

SHELL ("cp -r " & origine & " " & destinazione) WAIT

if Process.LastValue = 0 then
  tutto ok
else
  blah blah
endif

così eviti il Timer.

Ciao a tutti

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #8 il: 22 Gennaio 2010, 14:48:11 »
@ giulio

il tuo codice ve bene se il comando fa le cose "immediate"....però se si dovesse usare un comando che dura diversi secondi il tuo codice andrebbe sempre a leggere l'ELSE....

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #9 il: 26 Gennaio 2010, 01:25:30 »
No ceskho. Il WAIT serve proprio ad aspettare che il processo shell termini.

PRINT "dormo..."
  SHELL "sleep 10" WAIT
 
  IF Process.LastValue = 0 THEN
    PRINT "ho dormito 10 secondi"
  ELSE
    PRINT "ceskho ha ragione"   
  ENDIF

ciao

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #10 il: 26 Gennaio 2010, 01:28:50 »
Si si...mi sono espresso male..scusami...

il problema del wait è che freeza l'intera GUi e purtroppo questo può essere un problema (oltre che una questione antiestetica) ecco perchè suggerivo di usare il WAIT per i comandi più "immediati". Per ovviare al problema si può usare un timer.

Spero di essere stato più chiaro ora.. ;)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Controllare esito SHELL
« Risposta #11 il: 28 Gennaio 2010, 18:44:46 »
in effetti il wait a volte crea problemi, nel mio programma li ho tolti tutti in quanto spesso spesso mi impallavano il programma.

 

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Controllare esito SHELL
« Risposta #12 il: 28 Gennaio 2010, 18:50:48 »
PRINT "Ceskho tutto sommato non ha torto"