CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 9 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

Avviare comando linux e ottenere risultato in una String

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Dec 2010
    Messaggi
    105

    Ringraziamenti
    0
    Ringraziato 3 volte in 3 Posts
    Predefinito

    Avviare comando linux e ottenere risultato in una String

    MI chiedevo se e come fosse possibile avviare un comando linux ad esempio ls e ottenere il risultato che di norma andrebbe nello stdout in un oggetto String

  2.  
  3. #2
    Baby Droid L'avatar di lorenzoff


    Registrato dal
    Oct 2010
    Messaggi
    14

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Prova così

    codice:
    package it.lorenzoff;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class dummyActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            Runtime rt = Runtime.getRuntime();
            try {
    			Process ps = rt.exec("ls");
    			InputStream is = ps.getInputStream();
    			ps.waitFor();
    			is.read();
    			
    			final char[] buffer = new char[0x10000];
    			StringBuilder out = new StringBuilder();
    			Reader in = new InputStreamReader(is, "UTF-8");
    			int read;
    			do {
    			  read = in.read(buffer, 0, buffer.length);
    			  if (read>0) {
    			    out.append(buffer, 0, read);
    			  }
    			} while (read>=0);
    			
    			TextView t = (TextView)findViewById(R.id.testo);
    			t.setText(out.toString());
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }
    }
    Sull'emulatore funziona e non ho voglia di prendere il mio nexxy 'chè sta in carica.
    Ad ogni modo, non me l'aspettavo che funzionasse nel senso che -a rigor di logica- 'ls' non è un comando linux, come dici tu, ma soltanto un comando di (di molte delle) shell comunemente disponibili per questo sistema.
    La riga...
    codice:
    Process ps = rt.exec("ls");
    ...mi aspettavo dovesse includere anche la shell; mi aspettavo quindi di dover scrivere...
    codice:
    Process ps = rt.exec("suffisso.dominio.nomeshell ls");
    ...ma evidentemente una shell di sottofondo c'è e gira, almeno nell'emulatore.
    Cedo la parola volentieri a riguardo, anche perchè le cinque meno cinque del mattino non sono ora adatta a discorsi che vadano oltre pupù, pappa e nanna.
    «La deterrenza è l'arte di creare nell'animo dell'eventuale nemico il terrore di attaccare. Ed è proprio a causa dei congegni che determinano la decisione automatica irreversibile, escludendo ogni indebita interferenza umana, che l'ordigno "Fine di Mondo" è terrorizzante, eh, eh, eh, e di facile comprensione. E assolutamente credibile e convincente.»

  4. #3
    Baby Droid L'avatar di lorenzoff


    Registrato dal
    Oct 2010
    Messaggi
    14

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Infatti, ricollegando il cervello ad un'ora più civile, ho trovato dentro /system/bin un allegro eseguibile che non necessita di presentazioni: sh.
    Quindi quell'
    codice:
    Process ps = rt.exec("ls");
    dovrebbe andare sempre benone: dick, stai in una botte de fero.
    «La deterrenza è l'arte di creare nell'animo dell'eventuale nemico il terrore di attaccare. Ed è proprio a causa dei congegni che determinano la decisione automatica irreversibile, escludendo ogni indebita interferenza umana, che l'ordigno "Fine di Mondo" è terrorizzante, eh, eh, eh, e di facile comprensione. E assolutamente credibile e convincente.»

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy