Autore Topic: Chiamare apt update e apt upgrade da shell  (Letto 2811 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #45 il: 03 Agosto 2016, 14:52:53 »
Se è una materia molto complessa ce un modo di aggiornare da gambas la versione di linux senza usare i comandi apt-get update ed apt-get upgrade ?
La tua idea di utilizzare quei due comandi è corretta.... scusa, insomma, puoi testare innanzitutto il seguente codice ?

Codice: [Seleziona]
Private pr As Process


Public Sub Button1_Click()

  Dim root As String

   root = InputBox("Immetti password di root")

' Lanciamo con Shell i due comandi, e ne poniamo in osservazione in lettura il processo: '
   pr = Shell "echo " & root & " | sudo -S apt-get update && sudo -S apt-get upgrade" For Input As "Osserva"

End


Public Sub Osserva_Read()
 
  Print pr.ReadLine()
 
End
« Ultima modifica: 03 Agosto 2016, 14:54:46 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 Andreone

  • Gamberetto
  • *
  • Post: 25
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #46 il: 03 Agosto 2016, 17:06:09 »
Se è una materia molto complessa ce un modo di aggiornare da gambas la versione di linux senza usare i comandi apt-get update ed apt-get upgrade ?
La tua idea di utilizzare quei due comandi è corretta.... scusa, insomma, puoi testare innanzitutto il seguente codice ?

Codice: [Seleziona]
Private pr As Process


Public Sub Button1_Click()

  Dim root As String

   root = InputBox("Immetti password di root")

' Lanciamo con Shell i due comandi, e ne poniamo in osservazione in lettura il processo: '
   pr = Shell "echo " & root & " | sudo -S apt-get update && sudo -S apt-get upgrade" For Input As "Osserva"

End


Public Sub Osserva_Read()
 
  Print pr.ReadLine()
 
End

  pr = Shell "echo " & root & " | sudo -S apt-get update && sudo -S apt-get upgrade" For Input As "Osserva"

Unknown identifier:pr in Fmain.Class:14.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #47 il: 03 Agosto 2016, 17:21:09 »

Unknown identifier:pr in Fmain.Class:14.

Ho provato il codice: a me funziona perfettamente, come puoi vedere nel file immagine allegato.

Domanda un po' stupida:  nel codice, che hai incollato, ...sicuro che è presente la riga di comando Private pr As Process
« Ultima modifica: 03 Agosto 2016, 17:28:23 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 Andreone

  • Gamberetto
  • *
  • Post: 25
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #48 il: 03 Agosto 2016, 22:05:30 »

Unknown identifier:pr in Fmain.Class:14.

Ho provato il codice: a me funziona perfettamente, come puoi vedere nel file immagine allegato.

Dom

Ok, lo vedo così, ma appena lo compilo e lo lancio compilato, poi non vedo niente che cosa fà, cioè in gambas vedo la finestra echo
ma compilato non vedo poi nulla ?
Il problema è proprio questo........

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #49 il: 04 Agosto 2016, 00:11:06 »
....ma appena lo compilo e lo lancio compilato, poi non vedo niente che cosa fà, cioè in gambas vedo la finestra echo
ma compilato non vedo poi nulla ?
Il problema è proprio questo........

Il codice compilato come "eseguibile" (ad esempio: mio_programma.gambas), dal menu dell'IDE secondo la modalità seguente:

  Progetto-->Crea--->Eseguibile...

va lanciato da Terminale, come nuovamente puoi vedere nel file immagine allegato.


...e a me funziona ugualmente.    :)
« Ultima modifica: 04 Agosto 2016, 02:58:41 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 Andreone

  • Gamberetto
  • *
  • Post: 25
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #50 il: 04 Agosto 2016, 08:26:31 »
....ma appena lo compilo e lo lancio compilato, poi non vedo niente che cosa fà, cioè in gambas vedo la finestra echo
ma compilato non vedo poi nulla ?
Il problema è proprio questo........

Il codice compilato come "eseguibile" (ad esempio: mio_programma.gambas), dal menu dell'IDE secondo la modalità seguente:

  Progetto-->Crea--->Eseguibile...

va lanciato da Terminale, come nuovamente puoi vedere nel file immagine allegato.


...e a me funziona ugualmente.    :)

Anche a me funziona però voglio che
Quando clicco sull' eseguibile mi apre il terminale e non devo lanciare il programma dal terminale

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #51 il: 04 Agosto 2016, 15:31:27 »
.... però voglio che
Quando clicco sull' eseguibile mi apre il terminale e non devo lanciare il programma dal terminale

Dunque... possiamo esperire almeno due modalità.


1) la prima modalità (anche se è un po' farraginosa) prevede che siano attivati i Componenti gb.desktop e gb.desktop.x11:
Codice: [Seleziona]
Public Sub Form_Open()

  Shell "gnome-terminal"

End


Public Sub Button1_Click()

  Dim root As String
  Dim c As Integer[]
 
   root = InputBox("Immetti password di root")

' Trova l'identificativo della finestra del Terminale aperta prima.
' Nel metodo "FindWindow()" inseriamo il nome della finestra del Terminale: '
   c = Desktop.FindWindow("Termin*")

   If c.Count > 0 Then
' Attribuisce il "Focus" alla finestra del Terminale: '
      Desktop.ActiveWindow = c[c.Max]
     
' Scrive nel Terminale l'intera riga di comndo e la lancia: '
     Desktop.SendKeys("echo " & root & " | sudo -S apt-get update && sudo -S apt-get upgrade\n")
   Endif

End



2) La seconda modalità prevede di far aprire un Terminale, lanciare i due comandi mediante la semplice Shell,  e reindirizzare l'output al Terminale aperto inizialmente:
Codice: [Seleziona]
Private fl As File
Private pr As Process


Public Sub Form_Open()

 Dim b As Byte
 Dim pts, s As String

' Sollecitiamo l'apertura del Form e favoriamo la visibilità del Button:
   Me.Show
   Wait 0.3

   pts = "/dev/pts"
 
' Verifichiamo innanzitutto quanti file 'pts' sono presenti in "/dev/pts": '
  b = Dir(pts, Null, gb.Device).Count

' Apriamo il Terminale: '
  Shell "gnome-terminal" Wait

' Restiamo in attesa che venga generato il file-device speciale del Terminale: '
  Do
    Wait 0.01
  Loop Until b < Dir(pts, Null, gb.Device).Count

' L'ultimo file 'pts' creato è posizionato nel 1° elemento del vettore generato dalla funzione "Dir()": '
  s = Dir(pts, Null, gb.Device)[0]

' Apriamo il file-device speciale del Terminale in lettura bufferizzata: '
  fl = Open pts &/ s For Output

End


Public Sub Button1_Click()

  Dim root As String
 
  root = InputBox("Immetti password di root")

' Lanciamo con Shell i due comandi, e ne poniamo in osservazione in lettura il processo: '
   pr = Shell "echo " & root & " | sudo -S apt-get update && sudo -S apt-get upgrade" For Input As "Osserva"
   
End


Public Sub Osserva_Read()
 
' Reindirizziamo l'output del processo  verso il Terminale:
  Output To #fl
 
  Print pr.ReadLine()
 
End


Public Sub Form_Close()

' In caso di chiusura del Form, il file-device speciale viene chiuso ed il processo dei due comandi viene soppresso: '
  fl.Close
  pr.Kill
 
End
« Ultima modifica: 08 Agosto 2016, 17:12:12 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 vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.309
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Chiamare apt update e apt upgrade da shell
« Risposta #52 il: 14 Agosto 2016, 00:08:29 »
........Desktop.RunAsRoot


....credo ci sia attualmente un bug (dovrò segnalarlo a Minisini: a me da un errore.
Il bug è stato finalmente risolto (per chi usa l'aggiornamento via SVN/trunk con la rev. 7838).
« 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. »