Swing java command line abfangen

maXXX12345

Aktives Mitglied
Hallo.

Wie ist es in java möglich, eine eingabeaufforderung der Kommandozeile unter linux abzufangen und das gewünschte z.b.: über joptionpane (oder irgendwie anders) einzugeben?

habe unten stehenden code zur ausgabe! lediglich wenn eine eingabe erwartet wird wird nichts ausgegeben!

vielen dank!

mfg

Java:
import java.io.*;

public class Command{

    public static void exec(String batchcommand){

        try{

            Process pr = Runtime.getRuntime().exec(batchcommand);
            pr.waitFor();
            BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String line = "";

            while ((line = buf.readLine()) != null)
            {
                System.out.println(line);
            }
        }
        catch(Exception e){
        System.out.println("nicht ausführbar");
        }

    }

}
 
Wenn ich mich recht entsinne wartet .waitFor() bis der Prozess beendet ist und danach sind die Streams nicht mehr gültig.

Kommentiere es mal aus, eigentlich sollte es danach funktionieren.

Bernd
 
jetzt gibt mir prinln() folgendes für z.b.: sudo -s aus:

sudo: no tty present and no askpass program specified
nicht ausführbar


Ist schon mehr als vorher, jedoch möchte ich dazu kommen, dass er zumindest die gleiche zeile wie in der shell ausgibt und in weiterer folge (mit weiterem code dann) mich um eingabe bittet!

Wie erreiche ich das?

ich danke jedoch schon mal!

mfg
 
Ich kenne mich mit Linux nicht so besonders aus, aber vllt ist da eine Sperre drin, wenn man sudo über ein Process ausführt? Probier doch mal was einfacheres wie echo oder so...
 
ad 1)

echo usw, funktionieren ausgezeichnet.
verwende jetz unten stehenden code -> minimale abweichung zu vorher.

ad 2) habe das mit dem askpass gegoogelt und gefunden.
jedoch wie implementiere ich dies in eine klasse in java?

mfg und danke für die antworten

Java:
import java.io.*;

public class Command{

    Process pr;

    public void exec(String batchcommand){

        try{

            Process pr = Runtime.getRuntime().exec(batchcommand);
            //pr.waitFor();
            this.pr = pr;
            BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String line = "";

            while ((line = buf.readLine()) != null)
            {
                System.out.println(line);
            }

            buf = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
            line = "";

            while ((line = buf.readLine()) != null)
            {
                System.out.println(line);
            }
            System.out.println(pr.exitValue());

        }
        catch(Exception e){
            System.out.println("nicht ausführbar");
        }

    }

}
 
Das Problem wird sein, dass "sodu" von der Konsole lesen will, wenn du es aber via anderem Programm - also deinem Java-Programm - ausführst, hat es keine (eigene) Konsole, was die Meldung "no tty present and no askpass program specified" aussagt.

Du könntest im ersten schritt Probieren die STDIN vom Programm in deine eigene Umzuleiten (
Code:
getOutputStream()
). Wenn du Java 7 verwendest, kannst du es mit dem ProcessBuilder und der Methode
Code:
redirectInput()
angehen.

Bzgl askpass kann ich dir nicht helfen.
 
Du kannst sudo so konfigurieren, dass je nach belieben Anfragen von beliebigen Hosts (z.B. via SSH), Users oder an gewisse Programme ohne Passwort funktionieren. Hab ich auch mal benötigt, als ich mit Apache (PHP) auf ein Systemtool zugreifen wollte.
 

Zurück
Oben