View Full Version : [JAVA] Esecuzione Comando Dos Problema
Savio3000+
05-05-2008, 09:14
Salve, vi allego il mio codice
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class Builder {
public static void main(String[]args)
{
try
{
makeFile();
execute();
}
catch (IOException e)
{
System.out.println(e);
}
}
/**
* @author Savio
* @description Esegue comando dos
* @throws IOException
*/
public static void execute() throws IOException
{
Runtime will = Runtime.getRuntime();
Process pid=will.exec("cmd /c condor_submit prova.submit");
}
/**
* @author Savio
* @description Crea e scrive un file
* @throws IOException
*/
public static void makeFile() throws IOException
{
FileOutputStream file=new FileOutputStream("c:/condor/bin/file.submit");
PrintStream out=new PrintStream(file);
out.println("### SUBMIT DESCRIPTION FILE ###");
out.println("Universe = java");
out.println("Executable = job.class");
out.println("Jar_files = job.jar");
//out.println("Arguments = "+args[0]+" "+args[1]+" "+args[2]+" "+args[3]);
for (int i=0; i<10;i++)
{
out.println("Output"+i+"txt");
out.println("Error"+i+".txt");
out.println("Log"+i+".log");
}
}
}
Premettendo che:
1) da dos se faccio condor_submit prova.submit funziona tutto perfettamente!!!
2) se faccio come comando in java cmd /c dir /p perchè non si apre la schermata dos con -- premi un tasto per continuare?
3) il comando condor_submit non mi funziona lanciandolo da java, come mai? è importante... come posso risolvere?
Grazie anticipatamente
Savio3000+
05-05-2008, 09:49
Ho provato ora a fare un file .bat se ci clicco due volte funziona tutto perfettamente se uso il file java creato da me mettendo come cmd /c file.bat non fa niente!!!!!
aiutatemi che sto impazzendo!:mc: :mc:
String[] comando = {"cmd", "/c", "condor_submit", "prova.submit"};
Process proc=Runtime.getRuntime().exec(comando);
proc.waitFor();
se il file bat produce molto output o reindirizzi dal file bat l'output in null (dir >nul)
oppure da java crei un buffer che raccoglie l'output
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
qui cè spiegato come raccogliere l'output con una classe chiamata StreamGobbler
Savio3000+
05-05-2008, 16:21
String[] comando = {"cmd", "/c", "condor_submit", "prova.submit"};
Process proc=Runtime.getRuntime().exec(comando);
proc.waitFor();
se il file bat produce molto output o reindirizzi dal file bat l'output in null (dir >nul)
oppure da java crei un buffer che raccoglie l'output
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
qui cè spiegato come raccogliere l'output con una classe chiamata StreamGobbler
sembra che ho risolto solo facendo il .bat e mettendo come comando cmd /c start file.bat (cioè aggiungendo start funzioni, possibile?!?!?!!?)
banryu79
06-05-2008, 07:46
sembra che ho risolto solo facendo il .bat e mettendo come comando cmd /c start file.bat (cioè aggiungendo start funzioni, possibile?!?!?!!?)
Se vuoi saperne di più consulta il link che ti ha postato feboss (5 pagine): è molto esaustivo e propone appunto una classe (StreamGlobber) che risolve il problema di svuotamento dei buffer.
Ciao :)
Savio3000+
06-05-2008, 07:55
Se vuoi saperne di più consulta il link che ti ha postato feboss (5 pagine): è molto esaustivo e propone appunto una classe (StreamGlobber) che risolve il problema di svuotamento dei buffer.
Ciao :)
Ho capito, chiedevo come era possibile aver risolto solo aggiungendo start :)
banryu79
06-05-2008, 07:57
Ho capito, chiedevo come era possibile aver risolto solo aggiungendo start :)
Non lo so :)
@EDIT:
se ti può interessare, ho fatto una stampa dell'help di "start" in cmd.exe, ecco cosa salta fuori:
Apre una finestra a parte per eseguire un programma o un comando specifico.
START ["titolo"] [/percorso] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [comando/programma]
[parametri]
"titolo" Testo da visualizzare nella barra del titolo della finestra.
percorso Directory di avvio
B Avvia l'applicazione senza creare una nuova finestra.
L'applicazione ignora il controllo ^C. Finch‚ l'applicazione
non riattiver… autonomamente ^C, ^INTERR sar… l'unico
modo per interrompere l'applicazione.
I Il nuovo ambiente sar… l'ambiente originale trasmesso a
cmd.exe e non l'ambiente corrente.
MIN Avvia la finestra ridotta a icona.
MAX Avvia la finestra ingrandita.
SEPARATE Avvia programmi Windows 16 bit in uno spazio di memoria separato.
SHARED Avvia programmi Windows 16 bit in uno spazio di memoria condivisa.
LOW Avvia l'applicazione nella classe di priorit… IDLE.
NORMAL Avvia l'applicazione nella classe di priorit… NORMAL.
HIGH Avvia l'applicazione nella classe di priorit… HIGH.
REALTIME Avvia l'applicazione nella classe di priorit… REALTIME.
ABOVENORMAL Avvia l'applicazione nella classe di priorit… ABOVENORMAL
BELOWNORMAL Avvia l'applicazione nella classe di priorit… BELOWNORMAL
WAIT Avvia l'applicazione e ne attende la terminazione.
comando/programma
Se Š un comando interno cmd o un file batch, il processore
dei comandi verr… eseguito con l'opzione /K per cmd.exe.
La finestra non sar… quindi chiusa dopo l'esecuzione del
comando.
Se non Š un comando interno cmd o un file batch, si tratta
di un programma che sar… eseguito come applicazione in una
finestra o come applicazione di console.
parametri Questi sono i parametri passati al comando/programma.
Se le estensioni ai comandi sono abilitate, l'esecuzione di comandi dall'esterno
attraverso la riga di comando o il comando START Š cambiata come segue:
i file non eseguibili possono essere richiamati grazie alla associazione
digitando il nome del file come un normale comando. Esempio: WORD.DOC
avvier… l'applicazione associata con l'estensione di file .DOC.
Vedere i comandi ASSOC e FTYPE per informazioni su come creare le
associazioni dall'interno di uno script di comandi.
Se si esegue un'applicazione con GUI a 32 bit, CMD.EXE
non attende la terminazione dell'applicazione prima di ritornare al Prompt
dei comandi. Questo non accade se si sta eseguendo da uno script di comandi.
Se nella riga di comando la prima parola Š CMD, senza un'estensione o
un percorso, CMD Š sostituito con il valore della variabile COMSPEC,
per evitare di utilizzare CMD.EXE presente nella
directory corrente .
Se nella riga di comando la prima parola NON contiene un'estensione,
CMD.EXE utilizza il valore della variabile d'ambiente PATHEXT
per determinare quali estensioni cercare e in quale ordine.
Il valore predefinito per la variabile PATHTEXT Š:
.COM;.EXE;.BAT;.CMD
La sintassi Š la stessa della variabile PATH, il carattere
utilizzato per separare i vari elementi Š il punto e virgola.
Durante la ricerca di un eseguibile, se non c'Š alcun file corrispondente
con le estensioni previste, viene controllato se il nome, senza nessuna
estensione, corrisponde a quello di una directory; se Š vero, il comando START
avvia Esplora risorse a partire dal percorso individuato.
Se eseguito dalla riga di comando, Š equivalente all'esecuzione di CD /D
da quel percorso.
La parte in grassetto credo spieghi il "miracolo": aprendo una finestra a parte i buffer vengono svuotati autonomamente dal processo di quella finestra, credo.
Ciao :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.