Differenze tra le versioni di "Raccogliere quanto mostrato nella finestra di un Terminale"

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La questione è abbastanza complessa. Si tratta di capire come poter raccogliere (leggere) quanto viene mostrato all'interno di una finestra di un Terminale.
+
#REDIRECT [[Intercettare_quanto_viene_scritto_manualmente_nella_console_o_in_un_Terminale]]
 
 
E' il caso di precisare che è <SPAN style="text-decoration:underline">non</span> si intende capire come intercettare, ma come raccogliere tutto ciò che è leggibile, e quindi ciò che è stato già scritto ed ottenuto, nel Terminale.
 
 
 
Facciamo un esempio pratico: si apra un Terminale, e si lanci per esempio il comando: ''ls''.
 
 
 
La domanda è: una volta che il comando ''ls'' ha esercitato la sua funzione, ed il risultato è mostrato nel terminale, come raccogliere con codice Gambas <SPAN style="text-decoration:underline">ogni</span> riga appunto visibile nel Terminale ?
 
 
 
Allo stato attuale delle conoscenze di chi scrive, bisognerà trovare un compromesso fra comandi ''Bash'' e funzioni Gambas.
 
 
 
 
 
==Uso del comando "''Script''"==
 
Faremo in modo da aprire una finestra di Terminale e lanciarvi all'interno il comando ''Script'':
 
'''Public''' Sub Form_Open()
 
 
  Shell "gnome-terminal -e <FONT color=#B22222>script</font>"
 
 
'''End'''
 
Nel medesimo percorso ove è posizionato l'eseguibile Gambas, sarà creato un file, chiamato: "''typescript''". Si comincerà a scrivere e ad usare normalmente il terminale. Conclusa la scrittura, si dovrà lanciare in Terminale il comando ''Exit''. Questa fase finale chiuderà il Terminale, e procederà a copiare all'interno del file "''typescript''" quanto scritto e ritornato nel predetto Terminale, aggiungendovi dei codici speciali, leggibili ed interpretabili solo da un Terminale.
 
Quindi, tornando in Gambas, si potrà leggere agevolmente in un nuovo Terminale, quanto presente nel file "''typescript''":
 
'''Public''' Sub Button1_Click()
 
 
  Dim bb As Byte[]
 
  Dim ss As String[]
 
  Dim s As String
 
  Dim b As Byte
 
  Dim i As Integer
 
 
 
<FONT color=gray>' ''Individua il file speciale "/dev/pts/n" che sarà creato con riferimento all'apertura del nuovo Terminale:''</font>
 
  ss = Dir("/dev/pts", "*", gb.Device)
 
 
 
  bb = New Byte[ss.Count]
 
 
 
  For Each s In ss
 
    If IsNumber(s) Then bb[Val(s)] = CByte(Val(s))
 
  Next
 
 
 
  i = bb.Find(0, 1)
 
 
 
 
<FONT color=gray>' ''Apre un nuovo Terminale per la lettura del contenuto del file "typescript":''</font>
 
  Desktop.OpenTerminal
 
 
<FONT color=gray>' ''Attende la creazione del file speciale "/dev/pts/1":''</font>
 
  Do
 
    Wait 0.01
 
  Loop Until Exist("/dev/pts" &/ CStr(i))
 
 
 
  <FONT color=gray>' ''Legge dal file "typescript", ed indirizze il contenuto al nuovo Terminale appena aperto:''</font>
 
    Shell "cat typescript > /dev/pts" &/ CStr(i)
 
 
'''End'''
 
 
 
 
 
 
 
==Uso del comando "''xterm -l''"==
 
Per usare questa modalità, bisognerà aver installato nel proprio sistema il Terminale "''xterm''".
 
 
 
Si dovrà lanciare il comando ''xterm -l'':
 
'''Public''' Sub Button1_Click()
 
 
    Shell "<FONT color=#B22222>xterm -l</font>"
 
 
'''End'''
 
si aprirà quindi il Terminale "''xterm''". Nel medesimo percorso ove è posizionato l'eseguibile Gambas, verrà creato un file, il cui nome inizia con: ''Xterm.log.'' . Si potrà quindi scrivere ed utilizzare regolarmente il Terminale "''xterm''".
 
 
 
Successivamente, per rivedere quanto scritto ed ottenuto nel terminale, si dovrà andare a leggere il contenuto del predetto file.
 
'''Public''' Sub Button1_Click()
 
 
  Dim bb As Byte[]
 
  Dim ss As String[]
 
  Dim s As String
 
  Dim b As Byte
 
  Dim i As Integer
 
 
 
<FONT color=gray>' ''Individua il file speciale "/dev/pts/n" che sarà creato con riferimento all'apertura del nuovo Terminale:''</font>
 
  ss = Dir("/dev/pts", "*", gb.Device)
 
 
 
  bb = New Byte[ss.Count]
 
 
 
  For Each s In ss
 
    If IsNumber(s) Then bb[Val(s)] = CByte(Val(s))
 
  Next
 
 
 
  i = bb.Find(0, 1)
 
 
 
 
<FONT color=gray>' ''Apre un nuovo Terminale per la lettura del contenuto del file "typescript":''</font>
 
  Desktop.OpenTerminal
 
 
<FONT color=gray>' ''Attende la creazione del file speciale "/dev/pts/n":''</font>
 
  Do
 
    Wait 0.01
 
  Loop Until Exist("/dev/pts" &/ CStr(i))
 
 
 
  <FONT color=gray>' ''Legge dal file "typescript", ed indirizza il contenuto al nuovo Terminale appena aperto:''</font>
 
    Shell "cat Xterm.log.* > /dev/pts" &/ CStr(i)
 
 
'''End'''
 

Versione attuale delle 18:04, 11 nov 2021