|
|
(7 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 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 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'''
| |