Avatar billede x-masman Nybegynder
30. januar 2005 - 00:16 Der er 10 kommentarer og
1 løsning

Xterm commando fra java

Hej Eksperter,

Jeg har lige et par begynder spm. til at køre kommandoer fra java.

Hvordan får man java til at køre en commando i en xterm?

Kan man få outputet af commandoen ind i en String eller lignende?

Hvordan med programmer der køre i en shell. Kan man få den tekst programmet sender til shell'en? Eksempelvis hvis man starter VI, kan man så få outputtet over i en String eller hvad?
Avatar billede arne_v Ekspert
30. januar 2005 - 00:20 #1
Eksempel:

      Process p = Runtime.getRuntime().exec("java Test1");
      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line;
      while((line = br.readLine()) != null) {
        System.out.println(line);
      }
Avatar billede arne_v Ekspert
30. januar 2005 - 00:20 #2
Jeg garanterer ikke for at det virker med vi.
Avatar billede arne_v Ekspert
30. januar 2005 - 00:21 #3
På Linux er det nok iøvrigt bedst med:

      String[] cmd = { "java", "Test1" };
      Process p = Runtime.getRuntime().exec(cmd);
      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line;
      while((line = br.readLine()) != null) {
        System.out.println(line);
      }
Avatar billede x-masman Nybegynder
30. januar 2005 - 00:31 #4
Det virkede faktisk også med vi.

Men... Det jeg håbede på at lære noget om, var hvordan man måske kan køre en shell, hvor eksempelvis vi kunne køre. Når jeg så tastede input i mit program, så sendte det inputtet videre til shellen, således at jeg kunne køre vi kommandoer etc.
Eksempelvis hvis man nu ville søge eller gemme, så kunne man skrive kommandoen som så sendte den videre.
Avatar billede x-masman Nybegynder
30. januar 2005 - 13:22 #5
Har du en ide om hvordan jeg kommer videre?

Jeg har det her, men det virker jo ikke som jeg ønsker. Skal jeg bruge en shell, der tager imod kommandoer eller?

import java.io.*;

public class UserThread extends Thread{
   
    BufferedReader bufReader;
    String[] inputStrings;

    public void run(){
    while(true){
        bufReader = new BufferedReader(new InputStreamReader(System.in));
        try{
        String inputString = bufReader.readLine();
        inputStrings = inputString.split(" ");
        runCmd(inputStrings);
        }catch(Exception e){System.out.println("UserThread : " + e);}
    }
    }

    public void runCmd(String[] inputs) throws Exception{

    Process p = Runtime.getRuntime().exec(inputs);
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while((line = br.readLine()) != null) {
        System.out.println(line);
    }
    }
}
Avatar billede arne_v Ekspert
30. januar 2005 - 13:26 #6
Kan du uddybe "det virker jo ikke som jeg ønsker" ?
Avatar billede x-masman Nybegynder
30. januar 2005 - 13:31 #7
Sorry. Det virker ikke med hensyn til at køre programmer i en shell. Hvis jeg f.eks. starter vi, kan jeg ikke sende kommandoer til den. Hvis jeg eksempelvis prøver at gå ud af programmet med :q, så sker der ikke noget.

Er det muligt at få java til at tage input fra keyboardet og så sende det videre til programmet?
Avatar billede x-masman Nybegynder
30. januar 2005 - 13:34 #8
Man kan egentlig sige at det jeg ønsker at lave en form for shell, men jeg troede bare det var muligt, at bygge det på en eksisterende shell og så bare modtage outputtet i en String og sende inputtet i form at input fra keyboardet. Men hvis det ikke kan lade sig gøre, må jeg jo bare lave min egen shell. Jeg ville bare gerne uden om al det maskin-nære.
Avatar billede arne_v Ekspert
30. januar 2005 - 13:54 #9
Du kan jo prøve at hapse p.getOutputStream() og skrive til den.
Avatar billede x-masman Nybegynder
10. februar 2005 - 01:11 #10
Ja, jeg er ikke kommet så meget videre, men du svare jo på mit spm så læg et svar.
Avatar billede arne_v Ekspert
10. februar 2005 - 07:59 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester