Differenze tra le versioni di "Intercettare quanto viene scritto manualmente nella console o in un Terminale"

Da Gambas-it.org - Wikipedia.
Riga 3: Riga 3:
  
  
===L'applicativo intercetta i dati scritti nella propria console===
+
==L'applicativo intercetta i dati scritti nella propria console==
 
Di seguito mostreremo i casi in cui nella console di un progetto viene scritto del testo, manualmente dall'utente o ricevuto perché inviati dal programma stesso o dall'esterno. Successivamente, affinché tale testo possa essere raccolto, sarà necessario <SPAN style="text-decoration:underline">premere il tasto ''Invio''</span>.  
 
Di seguito mostreremo i casi in cui nella console di un progetto viene scritto del testo, manualmente dall'utente o ricevuto perché inviati dal programma stesso o dall'esterno. Successivamente, affinché tale testo possa essere raccolto, sarà necessario <SPAN style="text-decoration:underline">premere il tasto ''Invio''</span>.  
  
====Uso di ''Input''====
+
===Uso di ''Input''===
 
E' possibile utilizzare il comando ''Input'' per raccogliere quanto scritto nella console del programma (si dovrà comunque sempre premere il tasto "Invio").
 
E' possibile utilizzare il comando ''Input'' per raccogliere quanto scritto nella console del programma (si dovrà comunque sempre premere il tasto "Invio").
 
Il comando ''Input'' verrà utilizzato senza specificare il flusso, cosicché verrà intercettato lo standard ''input''.
 
Il comando ''Input'' verrà utilizzato senza specificare il flusso, cosicché verrà intercettato lo standard ''input''.
Riga 34: Riga 34:
  
  
====Ponendo sotto ''osservazione'' file speciali della console====
+
===Uso di ''Line Input''===
In quest'altro caso la console riceve dati, ad essa inviati tramite file speciali posti sotto ''osservazione''. Ricevuto o scritto manualmente il testo, si dovrà, come già detto, premere anche in questo caso il tasto "Invio".   |[[#Note|1]]|
+
L'istruzione ''Line Input'' consente rispetto al precedente ''Input'' di intercettare/leggere una stringa di caratteri, nella quale siano presenti anche spazi bianchi (codice ASCII &h20):
  Private fl As File
+
   '''Public''' Sub Main()
 +
   
 +
  Dim s As String
 +
 
 +
  Line Input s
 
   
 
   
 +
  Print s
 
   
 
   
  '''Public''' Sub Form_Open()
+
  '''End'''
 +
 
 +
 
 +
===Ponendo sotto ''osservazione'' file speciali della console===
 +
In quest'altro caso la console riceve dati, ad essa inviati tramite file speciali posti sotto ''osservazione''. Ricevuto o scritto manualmente il testo, si dovrà, come già detto, premere anche in questo caso il tasto "Invio". <SUP>&#091;[[#Note|Nota 1]]&#091;</sup>
 +
Private fl As File
 
   
 
   
    fl = Open "<FONT color=#B22222>/dev/stdin</font>" For Read Watch
 
 
   
 
   
 +
'''Public''' Sub Main()
 
   
 
   
<FONT color=gray>' ''oppure si può utilizzare il file-device "stdout":''
+
  fl = Open "<FONT color=#B22222>/dev/stdin</font>" For Read Watch
    '''fl = Open "/dev/stdout" For Read Watch'''</font>
 
 
   
 
   
 
  <FONT color=gray>' ''oppure si può utilizzare il file-device "tty":''
 
  <FONT color=gray>' ''oppure si può utilizzare il file-device "tty":''
    '''fl = Open "/dev/tty" For Read Watch'''</font>
+
  '''fl = Open "/dev/tty" For Read Watch'''</font>
 
   
 
   
  <FONT color=gray>' ''oppure si può utilizzare il relativo file-descriptor in "/proc/self/fd/'''2'''":''
+
  <FONT color=gray>' ''oppure si può utilizzare il relativo file-descriptor in "/proc/self/fd/'''0'''":''
    '''fl = Open "/proc/self/fd/'''2'''" For Read Watch'''</font>
+
  '''fl = Open "/proc/self/fd/'''0'''" For Read Watch'''</font>
 
   
 
   
 
  <FONT color=gray>' ''oppure anche il relativo file speciale in "/dev/pts"''
 
  <FONT color=gray>' ''oppure anche il relativo file speciale in "/dev/pts"''
 
  ' ''che bisognerà individuare, caso per caso:''
 
  ' ''che bisognerà individuare, caso per caso:''
    '''fl = Open "/dev/pts/''numero''" For Read Watch'''</font>
+
  '''fl = Open "/dev/pts/''numero''" For Read Watch'''</font>
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 64: Riga 73:
 
   Dim s As String
 
   Dim s As String
 
    
 
    
   TextArea1.Text = TextArea1.Text & fl.ReadLine()
+
   Print fl.ReadLine()
 
   
 
   
 
  '''End'''
 
  '''End'''
  
  
===L'applicativo intercetta e scrive ''in tempo reale'' i dati scritti manualmente in un Terminale===
+
==L'applicativo intercetta e scrive ''in tempo reale'' i dati scritti manualmente in un Terminale==
 
In modo del tutto analogo al precedente, in questo altro esempio, mentre si scrive manualmente in un terminale, il programma Gambas intercetta e riproduce ''in tempo reale'' quanto si sta in quel momento scrivendo con la tastiera. Dalle prove fatte non sempre alla prima pressione sul tasto il dato/carattere, inviato dalla tastiera, viene intercettato dal programma Gambas. Si è avuto un migliore risultato, per intercettare un carattere, premendo il medesimo tasto velocemente due volte.
 
In modo del tutto analogo al precedente, in questo altro esempio, mentre si scrive manualmente in un terminale, il programma Gambas intercetta e riproduce ''in tempo reale'' quanto si sta in quel momento scrivendo con la tastiera. Dalle prove fatte non sempre alla prima pressione sul tasto il dato/carattere, inviato dalla tastiera, viene intercettato dal programma Gambas. Si è avuto un migliore risultato, per intercettare un carattere, premendo il medesimo tasto velocemente due volte.
  
Riga 99: Riga 108:
  
  
 
+
==Un programma-Gambas invia e riceve testo ad/da altro applicativo-Gambas==
 
+
In questo caso un applicativo-Gambas invia del testo nella console di un altro applicativo-Gambas. Successivamente si scriverà del testo nella console di quest'altro applicatvo, e <SPAN style="text-decoration:underline">si premerà il tasto "Invio"</span> della tastiera. Il primo applicativo riceverà nella sua console quanto scritto ed inviato dal secondo applicativo. <SUP>&#091;[[#Note|Nota 2]]&#091;</sup>
===Un programma-Gambas invia e riceve testo ad/da altro applicativo-Gambas===
 
In questo caso un applicativo-Gambas invia del testo nella console di un altro applicativo-Gambas. Successivamente si scriverà del testo nella console di quest'altro applicatvo, e <SPAN style="text-decoration:underline">si premerà il tasto "Invio"</span> della tastiera. Il primo applicativo riceverà nella sua console quanto scritto ed inviato dal secondo applicativo.
 
 
  Private fl As File
 
  Private fl As File
 
  Private fl2 As File
 
  Private fl2 As File
Riga 110: Riga 117:
 
   
 
   
 
  <FONT color=gray>' ''Per inviare del testo alla console dell'altro applicativo:''</font>
 
  <FONT color=gray>' ''Per inviare del testo alla console dell'altro applicativo:''</font>
   fl = Open "/proc/''numero_processo_dell'altro_applicativo''/fd/2" For Write
+
   fl = Open "/proc/''numero_processo_dell'altro_applicativo''/fd/1" For Write
 
   
 
   
 
  <FONT color=gray>' ''oppure si può utilizzare il relativo file speciale in "/dev/pts":''
 
  <FONT color=gray>' ''oppure si può utilizzare il relativo file speciale in "/dev/pts":''
Riga 117: Riga 124:
 
   
 
   
 
  <FONT color=gray>' ''Per ricevere quanto scritto nella console dell'altro applicativo ed inviato:''</font>
 
  <FONT color=gray>' ''Per ricevere quanto scritto nella console dell'altro applicativo ed inviato:''</font>
   fl2 = Open "/proc/''numero_processo_dell'altro_applicativo''/fd/2" For Read Watch
+
   fl2 = Open "/proc/''numero_processo_dell'altro_applicativo''/fd/0" For Read Watch
 
   
 
   
 
  <FONT color=gray>' ''oppure si può utilizzare il relativo file speciale in "/dev/pts":''
 
  <FONT color=gray>' ''oppure si può utilizzare il relativo file speciale in "/dev/pts":''
Riga 151: Riga 158:
  
  
----
+
 
==Note==
+
=Note=
 
[1] In via generale abbiamo che l'uso di:
 
[1] In via generale abbiamo che l'uso di:
 
* <FONT color=#B22222>''/dev/pts/numero''</font> è possibile per <SPAN style="text-decoration:underline">scrivere</span> in console o Terminale; per <SPAN style="text-decoration:underline">leggere</span> il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o da medesimo Terminale, nonché per leggere ''in tempo reale'' quanto scritto nel Terminale;
 
* <FONT color=#B22222>''/dev/pts/numero''</font> è possibile per <SPAN style="text-decoration:underline">scrivere</span> in console o Terminale; per <SPAN style="text-decoration:underline">leggere</span> il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o da medesimo Terminale, nonché per leggere ''in tempo reale'' quanto scritto nel Terminale;
* <FONT color=#B22222>''/proc/num_processo/fd/2''</font> è possibile per <SPAN style="text-decoration:underline">scrivere</span> e per <SPAN style="text-decoration:underline">leggere</span> in console o Terminale;
+
* <FONT color=#B22222>''/proc/num_processo/fd/0''</font> è possibile per <SPAN style="text-decoration:underline">scrivere</span> e per <SPAN style="text-decoration:underline">leggere</span> in console o Terminale;
 
* <FONT color=#B22222>''/dev/stdin''</font> e <FONT color=#B22222>''/dev/stdout''</font> è possibile solo per <SPAN style="text-decoration:underline">leggere</span> il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o dal medesimo Terminale.
 
* <FONT color=#B22222>''/dev/stdin''</font> e <FONT color=#B22222>''/dev/stdout''</font> è possibile solo per <SPAN style="text-decoration:underline">leggere</span> il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o dal medesimo Terminale.
 +
 +
[2] Vedi anche questa pagina della Wiki:
 +
<BR><FONT color=Transparent>-----</font>[[Indirizzare_dati_da_un_programma_ad_un_altro_e_ad_un_Terminale|Indirizzare dati da un programma ad un altro e ad un Terminale]]
 +
<BR><FONT color=Transparent>-----</font>[[Usare_due_programmi_Gambas_contemporaneamente_mediante_Process,_lo_standard_Output_e_lo_standard_Input|Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input]]
 +
 +
 +
=Riferimenti=
 +
* https://it.wikipedia.org/wiki/Canali_standard#Descrizione

Versione delle 14:02, 11 giu 2017

Tenendo aperto il progetto di un applicativo, è possibile scrivere manualmente nella console dell'IDE e raccogliere dall'applicativo medesimo o da altro applicativo ciò che è stato scritto.
Alla pressione del tasto "Invio", tutto ciò che sarà stato scritto nella console, verrà raccolto, e potrà essere dunque gestito.


L'applicativo intercetta i dati scritti nella propria console

Di seguito mostreremo i casi in cui nella console di un progetto viene scritto del testo, manualmente dall'utente o ricevuto perché inviati dal programma stesso o dall'esterno. Successivamente, affinché tale testo possa essere raccolto, sarà necessario premere il tasto Invio.

Uso di Input

E' possibile utilizzare il comando Input per raccogliere quanto scritto nella console del programma (si dovrà comunque sempre premere il tasto "Invio"). Il comando Input verrà utilizzato senza specificare il flusso, cosicché verrà intercettato lo standard input.

Public Sub Main()

 Dim s As String
  
  Input s

  Print s

End

o anche con File.In (in questo esempio se si preme semplicemente solo il tasto "Invio", si viene avvertiti di ciò, ed il ciclo consente di reinserire ed inviare caratteri, ovviamente privi di spazio, dalla console):

Public Sub Main()

 Dim s As String
  
  Do
    Input #File.In, s
    If IsNull(s) Then Print "E' stato premuto il solo tasto 'Invio' !"
  Loop Until Not IsNull(s)
  
  Print s

End


Uso di Line Input

L'istruzione Line Input consente rispetto al precedente Input di intercettare/leggere una stringa di caratteri, nella quale siano presenti anche spazi bianchi (codice ASCII &h20):

 Public Sub Main()

 Dim s As String
  
  Line Input s

  Print s

End


Ponendo sotto osservazione file speciali della console

In quest'altro caso la console riceve dati, ad essa inviati tramite file speciali posti sotto osservazione. Ricevuto o scritto manualmente il testo, si dovrà, come già detto, premere anche in questo caso il tasto "Invio". [Nota 1[

Private fl As File


Public Sub Main()

 fl = Open "/dev/stdin" For Read Watch

' oppure si può utilizzare il file-device "tty":
 fl = Open "/dev/tty" For Read Watch

' oppure si può utilizzare il relativo file-descriptor in "/proc/self/fd/0":
 fl = Open "/proc/self/fd/0" For Read Watch

' oppure anche il relativo file speciale in "/dev/pts"
' che bisognerà individuare, caso per caso:
 fl = Open "/dev/pts/numero" For Read Watch

End


Public Sub File_Read()

 Dim s As String
 
  Print fl.ReadLine()

End


L'applicativo intercetta e scrive in tempo reale i dati scritti manualmente in un Terminale

In modo del tutto analogo al precedente, in questo altro esempio, mentre si scrive manualmente in un terminale, il programma Gambas intercetta e riproduce in tempo reale quanto si sta in quel momento scrivendo con la tastiera. Dalle prove fatte non sempre alla prima pressione sul tasto il dato/carattere, inviato dalla tastiera, viene intercettato dal programma Gambas. Si è avuto un migliore risultato, per intercettare un carattere, premendo il medesimo tasto velocemente due volte.

Il codice è semplicemente il seguente:

Private pr As Process


Public Sub Form_Open()

' Bisognerà individuare, caso per caso,
' il file speciale in "/dev/pts/", relativo al Terminale:
  pr = Shell "cat < /dev/pts/N" For Read As "pr"

End


Public Sub pr_Read()

 Dim s As String

   Read #pr, s, -256

' Vediamo il risultato scritto nella console ed in una "TextEdit":
     Print s

    TextEdit1.Text &= s

End


Un programma-Gambas invia e riceve testo ad/da altro applicativo-Gambas

In questo caso un applicativo-Gambas invia del testo nella console di un altro applicativo-Gambas. Successivamente si scriverà del testo nella console di quest'altro applicatvo, e si premerà il tasto "Invio" della tastiera. Il primo applicativo riceverà nella sua console quanto scritto ed inviato dal secondo applicativo. [Nota 2[

Private fl As File
Private fl2 As File


Public Sub Form_Open()

' Per inviare del testo alla console dell'altro applicativo:
  fl = Open "/proc/numero_processo_dell'altro_applicativo/fd/1" For Write

' oppure si può utilizzare il relativo file speciale in "/dev/pts":
  fl = Open "/dev/pts/numero" For Write


' Per ricevere quanto scritto nella console dell'altro applicativo ed inviato:
  fl2 = Open "/proc/numero_processo_dell'altro_applicativo/fd/0" For Read Watch

' oppure si può utilizzare il relativo file speciale in "/dev/pts":
  fl2 = Open "/dev/pts/numero" For Read Watch

End


Public Sub Button1_Click()

' Si invia del testo alla console dell'altro applicativo:
   Write #fl, "testo qualsiasi"
' oppure si può utilizzare "Print":
   Print #fl, "testo qualsiasi"
' o anche "Output To" e "Print":
   Output To #fl
   Print "testo qualsiasi"

End


Public Sub File_Read()

 Dim s As String

' Si legge quanto scritto nella console dell'altro applicativo ed inviato:
   Read #fl2, s, -256

   TextEdit1.Text = TextEdit1.Text & s

End



Note

[1] In via generale abbiamo che l'uso di:

  • /dev/pts/numero è possibile per scrivere in console o Terminale; per leggere il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o da medesimo Terminale, nonché per leggere in tempo reale quanto scritto nel Terminale;
  • /proc/num_processo/fd/0 è possibile per scrivere e per leggere in console o Terminale;
  • /dev/stdin e /dev/stdout è possibile solo per leggere il testo scritto ed inviato (ossia premuto il tasto "Invio" della tastiera) dalla medesima console o dal medesimo Terminale.

[2] Vedi anche questa pagina della Wiki:
-----Indirizzare dati da un programma ad un altro e ad un Terminale
-----Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input


Riferimenti