View Full Version : [Java] exec()
alfonso534791
11-10-2007, 16:22
Salve a tutti,
ho un grosso problema con java, non riesco ad eseguire un programma esterno con la funzione exec(). posto il codice:
public void training() throws IOException{
Process p=Runtime.getRuntime().exec("./RPCL/ulearn");
}
molto semplice. Questa funzione viene richiamata da altro pezzo di codice che credo sia inutile trascrivere. il punto è che il file ulearn nella cartella RPCL viene visto dal metodo in quanto non genera errore. Solo che è come se non fosse partito. Infatti l'esecuzione del programma, da shell, deve generare un file di testo, che invece non genera. Se lo facio a mano, da shell digito ./RPCL/ulearn funziona e crea il file.
Qualcuno sà aiutarmi,
Grazie mille
isAlreadyInUse
11-10-2007, 16:28
Che tipo di file è ulearn?
alfonso534791
11-10-2007, 20:59
è un file eseguibile ottenuto dalla compilazione del file ulearn.c , ho dimenticato di precisare che tutto ciò lo faccio su Linux Debian 2.6.21, e che il programma all'inizio funzionava, fino a quando un bel giorno(Lunedì) ha smesso per motivi che ignoro!!!
^TiGeRShArK^
11-10-2007, 22:06
devi semplicemente gestire l'output così ad occhio..
Se provi ad eseguire un file e questo file scrive qualcosa sulla stdout e non redirezoni l'output con il metodo exec si incasina tutto e il programma si inceppa.
Una soluzione completa la trovi con google (a quest'ora non mi va di goglare :asd: ), ma ad occhio se esegui "ulearn > output.out" potrebbe andare.
Se non va domani vedo di trovarti la procedura per gestire input e output da exec :p
alfonso534791
13-10-2007, 15:58
non và, cmq volevo precisare anche che il programma ha un file di configurazione che deve leggere, non è che con exec() bisogna occuparsi anche degli input oltre che degli output?
...un idea per controllare l'output e l'input...
try {
proc = Runtime.getRuntime().exec(iltuoprocesso);
input = new BufferedReader(newInputStreamReader(proc.getInputStream()));
output = proc.getOutputStream();
new Thread(){
public void run(){
String line;
try {
while((line = input.readLine()) != null){
System.out.println(line);
}
} catch(Exception e) {
System.out.println(e);
}
}
}.start();
} catch (IOException e) {
e.printStackTrace();
}
...invio di codice al processo slave...
private void SendCommand(String cmd){
try {
if(proc != null){
output.write(cmd.getBytes());
output.flush();
}
}catch(IOException e) {
System.out.println(e);
}
}
...ma potresti anche provare con un semplice...
Process child = Runtime.getRuntime().exec(ilmioporcesso);
child.waitFor();
...ciao...
alfonso534791
17-10-2007, 13:56
non và,
per provare a fare un debugging ho usato
int p=Runtime.getRuntime().exec("./ulearn").exitValue();
per vedere se l'esecuzione và a buon fine. ebbene genera la seguente eccezzione
va.lang.IllegalThreadStateException
cosa può essere?
non và,
per provare a fare un debugging ho usato
int p=Runtime.getRuntime().exec("./ulearn").exitValue();
per vedere se l'esecuzione và a buon fine. ebbene genera la seguente eccezzione
va.lang.IllegalThreadStateException
cosa può essere?
...indica che il processo non è ancora terminato...in caso di termine avvenuto dovrebbe restituire 0 se non sbaglio...
...ciao...
...mh...non potrebbe essere un problema di locazione?...
public void launchCommand(){
try{
File dir = new File (".");
String file = dir.getCanonicalPath();
System.out.println(file);
Process child = Runtime.getRuntime().exec("./go.sh");
child.waitFor();
}catch (Exception e){
System.out.println(e);
}
}
...cosa scrive a console?...
...ciao...
alfonso534791
20-10-2007, 16:58
il path è guisto,
non sò proprio cosa possa essere a non farlo funzionare!!!
il path è guisto,
non sò proprio cosa possa essere a non farlo funzionare!!!
...mh...prova a iniziare il tuo script con uno spostamento alla directory di residenza del comando...è possibile che l'exec non parta dalla directory da cui è lanciato il programma java...
#!/bin/sh
cd $JAVA_HOME/lib/ext
./ulearn
...ciao...
banryu79
24-10-2007, 11:35
Salve a tutti,
ho un grosso problema con java, non riesco ad eseguire un programma esterno con la funzione exec(). posto il codice:
public void training() throws IOException{
Process p=Runtime.getRuntime().exec("./RPCL/ulearn");
}
molto semplice. Questa funzione viene richiamata da altro pezzo di codice che credo sia inutile trascrivere. il punto è che il file ulearn nella cartella RPCL viene visto dal metodo in quanto non genera errore. Solo che è come se non fosse partito. Infatti l'esecuzione del programma, da shell, deve generare un file di testo, che invece non genera. Se lo facio a mano, da shell digito ./RPCL/ulearn funziona e crea il file.
Qualcuno sà aiutarmi,
Grazie mille
Guarda qui -> ExecHelper (http://ostermiller.org/utils/ExecHelper.java.html)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.