Autore Topic: [RISOLTO] intercettare il risultato di un comando SHELL  (Letto 409 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
[RISOLTO] intercettare il risultato di un comando SHELL
« il: 25 Luglio 2016, 17:47:13 »
sto giocherellando con cdparanoia (http://www.cyberciti.biz/faq/linux-ripping-and-encoding-audio-files/) ma il normale EXEC o shell non mi ritorna nulla.

da shell (terminale) il comando vuoto "cdparanoia" ritorna l'help del comando:
Codice: [Seleziona]
cdparanoia III release 10.2 (September 11, 2008)

(C) 2008 Monty <monty@xiph.org> and Xiph.Org

Report bugs to paranoia@xiph.org
http://www.xiph.org/paranoia/
USAGE:
  cdparanoia [options] <span> [outfile]

OPTIONS:
  -A --analyze-drive ....

ma dal solito esempio di gambas:
Dim s As String
   
    Shell "cdparanoia" To s
     
    Print s

« Ultima modifica: 26 Luglio 2016, 12:28:05 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:intercettare il risultato di un comando SHELL
« Risposta #1 il: 25 Luglio 2016, 23:36:45 »
...in tali casi molte volte è possibile ottenere il risultato di un comando Shell ponendo in osservazione il processo del programma esterno lanciato.

Insomma ad esempio:

Codice: [Seleziona]
Private pr As Process


Public Sub Main()

' Lanciamo con Shell il programma esterno e ne poniamo in osservazione in lettura il processo:
  pr = Shell "nome_programma" For Input As "Osserva"

End


Public Sub Osserva_Read()
 
  Print pr.ReadLine()
 
End
« Ultima modifica: 26 Luglio 2016, 09:02:28 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:intercettare il risultato di un comando SHELL
« Risposta #2 il: 26 Luglio 2016, 12:27:46 »
PERFETTO

funziona perfettamente .....

se puo' essere d'aiuto ho modificato il codice di VUOTT in modo da recepire l'output dei vari comandi e farne il parsing per estrarne il contenuto desiderato (ancora non l'ho fatto il parsing per il check del cd ma e' chiara l'idea):

Codice: [Seleziona]
Private pr As Process

Public ParanoiaReturns As New String[]

Public Sub Form_Open()

  Button_ReadCD.Enabled = VerifyAUdioCD()

End

Public Sub output_Read()
 
  ParanoiaReturns.Add(pr.ReadLine())
 
End

Function VerifyAUdioCD() As Boolean
 
  ParanoiaReturns.Clear
  pr = Shell "cdparanoia" For Input As "output"
  While ParanoiaReturns.Count = 0
    Wait
  Wend
 
End
« Ultima modifica: 26 Luglio 2016, 13:02:15 da allegfede »
se corri, morirai stanco (motto degli sniper)