komendy systemowe

0

hej.

mam pytanie , mozna w jakis sposob uruchamiac komendy systemowe poprzez program w javie ? chocby proste uname -a ? czy do tego potrzebna jest jakas biblioteka dodatkowa ?

z gory dzieki za poswiecony czas

sheezol

0

Tworzysz po prostu proces programu. Tu masz przykład: http://forum.ubuntu.pl/showthread.php?p=667586

0

powołując się na ten właśnie przykład , da radę jakoś wynik tej komendy przesłać do jakiegoś Stringa ?

Runtime rt = Runtime.getRuntime();
        args[0] = "uname";
        Process proc = rt.exec(args[0]);

chcialbym zeby jakas tam zmienna przechowywala wynik po wykonaniu tej komendy systemowej , a mam blad ze incompatible types itd.
a po uruchomieniu mam blad

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at modul_5.Serwer_1.main(Serwer_1.java:37)
Java Result: 1

linia 37 to ten args[0] = "uname";

moze jakas mala podpowiedz prosze ?

sheezol

0
package pl.koziolekweb.programmers.t155048;

import java.io.IOException;
import java.io.InputStream;

public class CmdRunner {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Runtime runtime = Runtime.getRuntime();
		Process process = runtime.exec("uname", new String[]{"-a"});
		InputStream inputStream = process.getInputStream();
		int i = 0;
		while((i = inputStream.read())>0){
			System.out.print(""+(char)i);
		}

	}

}

To powinno zadziałać ;)

0

tak w ogole to jest aplikacja serwer.java ktora tworzy gniazdko na porcie 5555 i przez PrintWriter "wstrzykuje" kod html dla przegladarki.

powyzsza wskazowka kompiluje się świetnie , ale wywala mi cos takiego podczas polaczenia przez przegladarke.

Exception in thread "main" java.io.IOException: Cannot run program "ver.": CreateProcess error=2, Nie mo¿na odnaleæ okrelonego pl
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:431)
        at java.lang.Runtime.exec(Runtime.java:328)
        at modul_5.Serwer_cw1.main(Serwer_cw1.java:36)
Caused by: java.io.IOException: CreateProcess error=2, Nie mo¿na odnaleæ okrelonego pl
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 4 more
Java Result: 1

a tutaj przykladowy kod "serwera"

package serwertest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Serwer_test {

    private static ServerSocket sock;
    private static Socket commSock;

    public static void main(String[] args) throws IOException
    {

        sock = new ServerSocket(5555);

        System.out.println("serwer gotowy do pracy");
        commSock = sock.accept();

        PrintWriter out = new PrintWriter(commSock.getOutputStream(), true);
        BufferedReader in = new BufferedReader( new InputStreamReader(commSock.getInputStream()));

        String inputLine, outputLine;
        inputLine = in.readLine();

        out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\" lang=\"pl\">");
        out.println("<head>");
        out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
        out.println("</head>");
        out.println("<body>");

        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("ver.");
        InputStream inputStream = process.getInputStream();
        int i = 0;
        while((i = inputStream.read())>0)
        {
            out.println("<h1>" + ""+(char)i + "</h1>");
        }

        out.println("<br>");
        out.println("<h1>UWAGA!</h1> można używać <b>wszelkich</b> tagów HTML");
        out.println("</body>");
        out.println("</html>");

        in.close();
        out.close();

        commSock.close();
        sock.close();
    }

}

akurat ten przyklad jest na windowsie stad tez komenda "ver." , chodzi mi o to aby ten "serwer" podawal do przegladarki wersje systemu na ktorym jest uruchomiony wlasnie poprzez komende systemowa ver.

prosze o pomoc w rozwiazaniu problemu.

sheezol

0

Może

System.getProperty("os.name");
//i
System.getProperty("os.version");
0

no i wszystko jasne ;) dzieki serdeczne

temat zamkniety

pozdrawiam

sheezol

0

Cannot run program "ver.": CreateProcess error=2, The system cannot find the file specified
Nie umiem się pozbyć tego błędu z podanego tutaj programu. Po połączeniu z przeglądarką wywala program, może jakieś małe wskazówki. Będę wdzięczny.

0

Co to za kropka po 'ver', hm?

0

Dwie wskazówki:

  1. nie uruchamiaj programu, którego nie ma.
  2. zamiast
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("ver.");
        InputStream inputStream = process.getInputStream();
        int i = 0;
        while((i = inputStream.read())>0)
        {
            out.println("<h1>" + ""+(char)i + "</h1>");
        }

daj

   out.println("<h1>"+System.getProperty("os.name")+" "+System.getProperty("os.wersion")+"</h1>")+;
0

@deus., w Windows działa i ver, i ver., w Linuksie ani to, ani to.

0

Ekhm, fakt. Nie działa bo 'ver' nie jest programem a wewnętrznym poleceniem interpretera - "cmd /c ver" powinno zadziałać. Uruchamianie programu to nie to samo co wywołanie polecenia shella.

1 użytkowników online, w tym zalogowanych: 0, gości: 1