Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Java exec passare stringa a programma

    Salve, devo usare exec per una chiamata di sistema. Quando da terminale do il comando, dopo mi chiede di inserire 3 caratteri da tastiera. E' possibile fare lo stesso con exec di java (ovviamente non passandoli come argomenti al comando)???


    Grazie

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ciao si funziona tutto esattamente come da riga di comando..
    già che ci siamo ti giro una classe molto carina che gestisce molto bene gli exec esterni, leggendo anche eventuali stream di output o error

    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class RunnableHelper {
    	
    	// FUNZIONE PER ESEGUIRE UN FILE .EXE O .BAT
    	public int runFile(String pathfile){
    		
    		int exitVal = 0;
    		String errors = "";
    		
    		try {
    
    			Runtime rt = Runtime.getRuntime();
    			Process proc = rt.exec(pathfile);
    			
                StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");            
                StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
    
                errorGobbler.start();
                outputGobbler.start();
    			
    			exitVal = proc.waitFor();
    			errors = errors + "Process exitValue: " + exitVal;
    			
    		} catch (Throwable t){
    			
    			// SCRITTURA LOG
    			System.out.println("JAVA ERROR " + t.getMessage());
    			exitVal = -1;
    			
    		}
    		
    		return exitVal;
    
    	}
    	
    	// CLASSE INTERNA PER LETTURA STREAM
    	class StreamGobbler extends Thread
    	{
    	    InputStream is;
    	    String type;
    	    
    	    StreamGobbler(InputStream is, String type)
    	    {
    	        this.is = is;
    	        this.type = type;
    	    }
    	    
    	    public void run()
    	    {
    	        try
    	        {
    	            InputStreamReader isr = new InputStreamReader(is);
    	            BufferedReader br = new BufferedReader(isr);
    	            String line=null;
    	            while ( (line = br.readLine()) != null)
    	                System.out.println(type + ">" + line);    
    	            } catch (IOException ioe)
    	              {
    	                ioe.printStackTrace();  
    	              }
    	    }
    	}
    }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Ciao e grazie per la risposta. Purtroppo la classe può solo leggere dallo standard errore e output, ma non riesco a capire come passare una stringa allo standard input del comando "pathfile"

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se devi passare dei dati al programma, ovviamente, dovrai prelevare l'OutputStream del Process e scriverci dentro (in modo speculare a quanto fa la classe postata da morphy79, che prende l'InputStream e l'ErrorStream).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    Originariamente inviato da tuxpeppe
    Ciao e grazie per la risposta. Purtroppo la classe può solo leggere dallo standard errore e output, ma non riesco a capire come passare una stringa allo standard input del comando "pathfile"
    scusa non avevo letto bene avevo letto da riga di comando... cmq il principio è quello che ti ha detto lele... recuperi dal process il getOutputStream() e ci scrivi dentro
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.