Se provi questa riga di comando:
Shell System.Find("mate-terminal") & " -x " & System.Find("speedtest-cli")
oppure:
Shell System.Find("mate-terminal") & " -e " & System.Find("speedtest-cli")
cosa succede ?
Comunque mi accade solo con alcuni programmi.
Ad esempio:
Shell System.Find("xterm") & " -e wmctrl -l"
Invece, se lancio questo:
Shell System.Find("xterm") & " -e cvlc /percorso/di/un/file/audio"
oppure con (io non ho l'ambiente grafico Mate, ma Gnome):
Shell System.Find("gnome-terminal") & " -x cvlc /percorso/di/un/file/audio"
il terminale richiamato si apre e non si chiude istantaneamente.
...con Shell il richiamo a un Terminale non è necessario.
Fai semplicemente:
Dim a As String
Shell "speedtest-cli" To a
Label1.Text = a
L'uso dell'istruzione "To variabile", però, va bene se il programma lanciato ti restituisce un risultato tutto subito, in un colpo solo.
Se "speedtest-cli" ti dà vari risultati differiti nel tempo, allora dovrai porlo sotto osservazione aprendo il suo processo in Lettura:
Private pr As Process
Public Sub Form_Open()
' Lancia "speedtest-cli", ne apre il processo e lo pone sotto osservazione:
pr = Shell "speedtest-cli" For Input As "Speed"
End
' Quando c'è qualcosa da leggere dal processo di "Speedtest-cli", allora viene sollevato questo Evento di lettura dei dati:
Public Sub Speed_Read()
Dim s As String
Line Input #pr, s
Label1.Text = s
End
Al riguardo suggerisco questa pagina:
https://www.gambas-it.org/wiki/index.php?title=Lettura_dati_da_un_Processo_e_scrittura_dati_in_un_Processo
1) Non hai copiato e quindi inserito la prima riga della dichiarazione della variabile di tipo "Process" come Globale.
Riguarda bene il mio codice all'inizio.
Essa va inserita così:
Private pr As Process
Public Sub Form_Open()
...etc....
2) C'è un mio errore di scrittura qua:
Label.Text1.Text = s
che ora ho corretto.
Ovviamente va scritto così:
Se vuoi adattare tutto alla dimensione delle stringhe lette:
Private c As Short
' Quando c'è qualcosa da leggere dal processo di "Speedtest-cli", allora viene sollevato questo Evento di lettura dei dati:
Public Sub Speed_Read()
Dim s As String
Line Input #pr, s
' Se la larghezza orizzontale della "corrente" (or ora letta) stringa di caratteri è maggiore del valore presente nella variabile "c", allora la variabile "c" assumerà il valore della larghezza della "corrente" stringa:
If Label1.Font.TextWidth(s & Space(5)) > c Then c = Label1.Font.TextWidth(s & Space(5))
' Il "Form" principale assume la larghezza pari al valore contenuto dalla variabile "c":
Me.W = c
' Così anche la "Label":
Label1.W = c
' Nella "Label" vengono scritti il testo precedentemente contenuto + la nuova riga or ora letta + il carattere di nuova riga a capo:
Label1.Text &= s & "\n"
End
Amen !
...oppure, anziché usare questa riga con un booleano esplicito:
If Label1.Font.TextWidth(s & Space(5)) > c Then c = Label1.Font.TextWidth(s & Space(5))
puoi usare la funzione nativa "Max()":
c = Max(Label1.Font.TextWidth(s & Space(5)), c)
Ad ogni modo mi pare che, osservando la linea di comando con Shell da te presentata, sei interessato a conoscere il contenuto del parametro "model name" della CPU presente nel file "/proc/cpuinfo".
Ebbene, poiché questo file di sistema può essere letto come fosse un file di testo, per conoscerne il contenuto, è sufficiente utilizzare le native funzioni di Gambas per la gestione delle stringhe di testo.
Pertanto, se ad esempio abbiamo un hardware costituito da una sola CPU (oppure, se multicore, fare riferimento alla prima CPU considerata dal"/proc/cpuinfo"), possiamo conoscere quanto riportato al parametro, da te ricercato ("model name "), con questo semplice codice usando la funzione Scan() (https://gambaswiki.org/wiki/lang/scan?l=it) nativa di Gambas:
Public Sub Main()
Dim s As String
s = File.Load("/proc/cpuinfo")
s = Scan(s, "*model name*:*stepping*")[2]
Print Trim(s)
End
...vi sembra così complicato da doversi appellare al comando bash "cat" e alla funzione Shell ? :-\
In alternativa: -
Dim sCPU As String
Shell "lscpu | grep 'Model name:'" To sCPU
sCPU = Trim(Replace(sCPU, "Model name:", ""))
Print sCPU