Forum » Programiranje » [java] Runtime.exec()
[java] Runtime.exec()
borchi ::
naj mi kdo pomaga pognat dos okno (COMMAND.COM) iz jave v Windows 95/98. PLIZ!!!
v WinXP je to enostavno:
Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "cmd.exe", "/C", "START /WAIT" };
try {
Process child = rt.exec(callAndArgs);
child.waitFor();
} catch(IOException e) {
System.err.println("IOException starting process!");
} catch(InterruptedException e) {
System.err.println("Interrupted waiting for process!");
}
v Win98 pa to ne špila, če namesto cmd.exe kličem command.com. dos okno mi "obvisi", predpostavljam, da bi mogu kj nardit z vhodnimi/izhodnimi tokovi. kako? kakšen namig?
v WinXP je to enostavno:
Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "cmd.exe", "/C", "START /WAIT" };
try {
Process child = rt.exec(callAndArgs);
child.waitFor();
} catch(IOException e) {
System.err.println("IOException starting process!");
} catch(InterruptedException e) {
System.err.println("Interrupted waiting for process!");
}
v Win98 pa to ne špila, če namesto cmd.exe kličem command.com. dos okno mi "obvisi", predpostavljam, da bi mogu kj nardit z vhodnimi/izhodnimi tokovi. kako? kakšen namig?
l'jga
borchi ::
BUMP!
1. stvar je preveč enostavna, da bi se kdo s tem ukvarjal 5 sec?
2. ni mogoče izvest?
3. nihče ne uporablja več win98?
1. stvar je preveč enostavna, da bi se kdo s tem ukvarjal 5 sec?
2. ni mogoče izvest?
3. nihče ne uporablja več win98?
l'jga
kopernik ::
Jaz bi ti rade volje poizkusil pomagati, vendar nimam dostopa do kakih win95 ali win98, tako da ne morem preveriti tvojega problema.
Sergio ::
enako pri meni, zal...
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
če usoda ustavi mu korak,
on se ji zoperstavi.
borchi ::
ok, kk bi pa potem nardili v winXP, če bi hotel pognati samo "cmd.exe" brez parametrov "/C START /WAIT"? upam, da pridem do istega problema?
hvala!
hvala!
l'jga
kopernik ::
Ja, program čaka na input. "cmd.exe" čaka na nek ukaz, zato zadeva ne špila. Dela pa naslednje:
-----------------------------
Output je sledeč:
public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec("cmd.exe"); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())); out.write("cd \\\n"); //cmd-ju smo poslali ukaz "cd \" out.close(); int exitValue = proc.waitFor(); System.out.println("Process exited with value " + exitValue + "\n\n"); InputStream in = null; try { in = proc.getInputStream(); BufferedReader processOutput = new BufferedReader(new InputStreamReader(in)); String line; while((line = processOutput.readLine()) != null) { System.out.println(line); } } finally { in.close(); } }
-----------------------------
Output je sledeč:
Process exited with value 0
Microsoft Windows XP [Version 5.1.2600]
© Copyright 1985-2001 Microsoft Corp.
C:\Projects>cd \
C:\>
Zgodovina sprememb…
- spremenil: kopernik ()
borchi ::
aha, sam to je tako, da poženeš proces, poloviš output in ga spljuneš ven, ko je proces že zaključen. js rabim "realtime" oz. interakcijo. mi lahko daš kak nasvet glede tega? al pa če mi že kr ribo uloviš (prosto po kitajcih)
sicer ne vem, če bo to delalo v win98, trenutno imam tut jaz pod prsti samo winXP :-( ampak drugače bo pa mal za vajo.
sicer ne vem, če bo to delalo v win98, trenutno imam tut jaz pod prsti samo winXP :-( ampak drugače bo pa mal za vajo.
l'jga
kopernik ::
Malce težko ti čez vikend pomagam, ker imam doma linux. Mogoče bom kaj čez vikend skočil v službo, kjer je nekaj mašin z winXP.
Glede interakcije ... s tem nimam prav dosti izkušenj na tak način. Če bom imel čas, bom pogledal.
Glede interakcije ... s tem nimam prav dosti izkušenj na tak način. Če bom imel čas, bom pogledal.
kopernik ::
Evo, na hitro spackana rešitev za bash v linuxu:
Še output:
drwxr-xr-x 6 jan users 224 2004-08-15 15:41 .
drwxr-xr-x 3 jan users 72 2004-08-15 15:38 ..
-rw-r--r-- 1 jan users 267 2004-08-15 15:41 .classpath
drwxr-xr-x 2 jan users 48 2004-08-15 15:39 dist
drwxr-xr-x 2 jan users 48 2004-08-15 15:39 documentation
drwxr-xr-x 5 jan users 128 2004-08-15 15:40 implementation
-rw-r--r-- 1 jan users 372 2004-08-15 15:38 .project
drwxr-xr-x 2 jan users 96 2004-08-15 15:41 .settings
::::::::::::::
.classpath
::::::::::::::
< ?xml version="1.0" encoding="UTF-8"?>
< classpath>
< classpathentry kind="src" path="implementation/sources/java"/>
< classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
< classpathentry kind="output" path="implementation/build"/>
< /classpath>
V winXP bi moralo podobno delati za cmd.exe, ni pa nujno. Poglej si malo javansko dokumentacijo o razredu Process. To je precej sivo področje, ker oper. sistemi različno upravljajo s procesi in težave se lahko hitro pojavijo. Tak način uporabe Jave se mi zdi malo mimo, vendarče ti to rabiš ...
public class TestProcess { public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec("bash"); OutputStream out = proc.getOutputStream(); out.write("ls -al\n".getBytes()); //izpis working direktorija out.flush(); System.out.println(new String(convertStream(proc.getInputStream()))); out.write("more .classpath\n".getBytes()); //izpis datoteke .classpath out.flush(); out.close(); System.out.println(new String(convertStream(proc.getInputStream()))); } private static byte[] convertStream(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); int size = 0; byte[] buffer = new byte[4096]; while((size = in.read(buffer)) != -1) { out.write(buffer, 0, size); if(size < buffer.length) { break; } } return out.toByteArray(); } }
Še output:
drwxr-xr-x 6 jan users 224 2004-08-15 15:41 .
drwxr-xr-x 3 jan users 72 2004-08-15 15:38 ..
-rw-r--r-- 1 jan users 267 2004-08-15 15:41 .classpath
drwxr-xr-x 2 jan users 48 2004-08-15 15:39 dist
drwxr-xr-x 2 jan users 48 2004-08-15 15:39 documentation
drwxr-xr-x 5 jan users 128 2004-08-15 15:40 implementation
-rw-r--r-- 1 jan users 372 2004-08-15 15:38 .project
drwxr-xr-x 2 jan users 96 2004-08-15 15:41 .settings
::::::::::::::
.classpath
::::::::::::::
< ?xml version="1.0" encoding="UTF-8"?>
< classpath>
< classpathentry kind="src" path="implementation/sources/java"/>
< classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
< classpathentry kind="output" path="implementation/build"/>
< /classpath>
V winXP bi moralo podobno delati za cmd.exe, ni pa nujno. Poglej si malo javansko dokumentacijo o razredu Process. To je precej sivo področje, ker oper. sistemi različno upravljajo s procesi in težave se lahko hitro pojavijo. Tak način uporabe Jave se mi zdi malo mimo, vendarče ti to rabiš ...
Zgodovina sprememb…
- spremenil: kopernik ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [JAVA] HTTPS clientOddelek: Programiranje | 3170 (1900) | peterv6i |
» | Java skeniranje map in podmapOddelek: Programiranje | 1147 (1036) | nightrage |
» | [JAVA] zaustavitev niti (threadov)Oddelek: Programiranje | 3170 (3170) | morbo |
» | [Java]Brane spletne strani preko httpsOddelek: Programiranje | 2130 (1949) | CWIZO |
» | Kako pošiljanje datotek v JAVI.Oddelek: Programiranje | 1833 (1704) | kopernik |