Autore Topic: da c++ a gambas (terminale)  (Letto 3352 volte)

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
da c++ a gambas (terminale)
« il: 16 Giugno 2014, 12:20:03 »
ho questo in c++
Codice: c++ [Seleziona]

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    system("sudo ./arduino/arduino");

}



in gambas l'ho trasmutato con
Codice: gambas [Seleziona]

Public Sub Main()

Desktop.RunAsRoot("sudo ./arduino/arduino")

End



ma in c++ la finestra di xterm rimane aperta permettendo l'esecuzione di arduino mentre in gambas si chiude immediatamente...
 :-\


il codice serve per lanciare arduino (Script shell (application/x-shellscript))
e farlo con gambas è comodo perchè si possono fare gli eseguibili
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #1 il: 16 Giugno 2014, 12:30:03 »
Il metodo Desktop.RunAsRoot() ti consente semplicemente di immettere la tua password per lanciare i comandi che la richiedono.

Per tenere aperto il Terminale, prova così:   :-X
Progetto-->Proprietà-->Opzioni
quindi in basso poni a "Sì" l'opzione "Use a terminal emulator".
« 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 simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #2 il: 16 Giugno 2014, 12:37:34 »
si fanno progressi...

tuttavia si chiude lo stesso....
il problema è che Desktop.RunAsRoot non aspetta la chiusura del processo che ha lanciato...
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #3 il: 16 Giugno 2014, 12:58:12 »
Ma questo applicativo è in ambiente grafico oppure è a riga di comando ?
« 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #4 il: 16 Giugno 2014, 13:13:38 »
 :ciao:
Citazione
il codice serve per lanciare arduino (Script shell (application/x-shellscript))
e farlo con gambas è comodo perchè si possono fare gli eseguibili

puoi raccontare meglio cosa intendi dire? (e fare?)
anch'io sto giocando con arduino!
 :)
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #5 il: 16 Giugno 2014, 13:17:23 »
Vedi se così va meglio:
Codice: gambas [Seleziona]
Shell "echo mia_password | sudo -S ./arduino/arduino"


Se l'applicativo Gambas è a riga di comando, allora crea l'eseguibile senza quell'opzione che ti avevo indicato precedentemente, e lancialo da Terminale.
« 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 Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: da c++ a gambas (terminale)
« Risposta #6 il: 16 Giugno 2014, 14:20:19 »
Codice: [Seleziona]
Desktop.RunAsRoot("sudo ./arduino/arduino &")

o

Codice: [Seleziona]
Desktop.RunAsRoot("sudo ./arduino/arduino; bash")  
« Ultima modifica: 16 Giugno 2014, 14:22:16 da Ceskho »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #7 il: 16 Giugno 2014, 15:36:39 »
Codice: [Seleziona]
Desktop.RunAsRoot("sudo ./arduino/arduino &")
Ho usato un altro comando anziché "./arduino/arduino".
La prima soluzione proposta da ceskho a me non risolve il problema posto da simo97.



Codice: [Seleziona]
Desktop.RunAsRoot("sudo ./arduino/arduino; bash")  
Quest'altra soluzione sembrerebbe andare bene, ma in xterm ottengo questo avviso:
Codice: [Seleziona]
bash: cannot set terminal process group (18655): Inappropriate ioctl for device
bash: no job control in this shell
« Ultima modifica: 16 Giugno 2014, 15:38:54 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 simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #8 il: 16 Giugno 2014, 20:14:44 »
:ciao:
Citazione
il codice serve per lanciare arduino (Script shell (application/x-shellscript))
e farlo con gambas è comodo perchè si possono fare gli eseguibili

puoi raccontare meglio cosa intendi dire? (e fare?)
anch'io sto giocando con arduino!
 :)
l'applicativo è l'ide di arduino e lo lancio con sudo perché altrimenti non legge le porte seriali....

Vedi se così va meglio:
Codice: gambas [Seleziona]
Shell "echo mia_password | sudo -S ./arduino/arduino"


sudo -S ./arduino/arduino
la s piccola...
così funziona ma devo lanciarlo da terminale il che non risolve il problema iniziale..

le altre opzioni proposte danno lo stesso risulto del codice proposto all'inizio da me...

 :-\

;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #9 il: 17 Giugno 2014, 00:49:42 »
Vediamo se funziona questa soluzione (ancora a riga di comando. Va nuovamente attivata l'opzione: "Use a terminal emulator"):
Codice: gambas [Seleziona]

Public Sub Main()

   Print "\n'i' + [Invio] per ottenere informazioni"

End


''Questo è un gestore di eventi. lo STDIN è rediretto qui

Public Sub Application_Read()
   
  Dim s As String

   Line Input #File.In, s

   If s = "i" Then
      Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
      Print "- 'vai' per lanciare"
      Print "- 'quit' per chiudere."
   Else
      If s = "vai" Then
        Shell "echo mia_password | sudo -s ./arduino/arduino" 
      Endif
      If s = "quit" Then
        Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
        Sleep 2
        Quit
    Endif
 
  Endif

End
« 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #10 il: 17 Giugno 2014, 13:16:12 »
 :ciao:
Citazione
l'applicativo è l'ide di arduino e lo lancio con sudo perché altrimenti non legge le porte seriali....

Io ho preferito creare un link sulla scrivania inserendo nello script:

sudo chmod -R 777 /dev/ttyACM0
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: da c++ a gambas (terminale)
« Risposta #11 il: 17 Giugno 2014, 16:49:47 »
Un'altra modalità, per conservare l'automaticità dell'avvio di Arduino all'interno di un Terminale che non si chiuda dopo, potrebbe essere la seguente. E' necessario attivare i componenti gb.desktop  e  gb.desktop.x11.
Codice: gambas [Seleziona]

Public Sub Button1_Click()
    
' Apro la finestra di un Terminale:
   Desktop.OpenTerminal
      
End


Public Sub Button2_Click()    
      
 Dim c As Integer[]  
 
' Trova l'identificativo della finestra del Terminale aperta prima:
  c = Desktop.FindWindow("Terminal")    
 
  If c.Count > 0 Then
' Attribuisce il "Focus" alla finestra del Terminale:
    Desktop.ActiveWindow = c[c.Max]

     Desktop.SendKeys("echo mia_password | sudo -s .arduino/arduino\n")   ' oppure la riga di comando proposta sopra da "kicco", purché alla fine ci sia l'escape:  \n
  Endif
 
End

« Ultima modifica: 17 Giugno 2014, 18:44:00 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.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:da c++ a gambas (terminale)
« Risposta #12 il: 10 Maggio 2017, 10:30:07 »
ho questo in c++


Volendo, ovviamente, potresti anche utilizzare direttamente la funzione "system( )" con Extern:

Codice: [Seleziona]
' int system (const char *__command)
' Execute the given line as a shell command.
Private Extern system(__command As String) As Integer in "libc:6"

Public Sub Button1_Click()

   system("sudo ./arduino/arduino")

End
« 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. »