runtime.exec - jak przechwycic output programu?

0

Jest taka sprawa: Uruchamiam w Javie progrma exe za pomoca runtime.exec. Wszystko dziala i nie ma problemu z sama komenda. Dodam jeszcze ze uruchamiam program z argumentami wiec argument exec-a ma postac tablicy (nie sadze aby to bylo istotne ale pisze to dla pelnej informacji).

I teraz problem: program wyswietla w cmd jakies napisy a ja bym chcial je przechwycic. Nie istotne jest dla mnie czy pojda one do jakiejs zmiennej string juz w programie czy np. do pliku tekstowego (nawet lepiej). Chce tylko aby sie zachowaly.

Probowalem dodawac do parametrow "> out.txt" i tego typu kombinacje ale to nie dziala. Ktos moze mi podac jakis przykladzik kodu ktory by to rozwiazywal? Mile widziany nawet najprostszy przyklad ktory by zapisywal wyswietlany napis "Hello world" do pliku lub stringa.

Dodam jeszcze ze nie mam mozliwosci zmiany kodu programu ktory uruchamiam tzn. - to co on wywala musze odczytywac z ekranu, nie ma opcji aby tamten program to zapisywal gdziekolwiek...

0

U mnie działa :)
Taki kod:

public class Out{	
	public static void main(String[] args){
		for(int i=0; i<args.length; i++)
		System.out.println(args[i]);
	}
};

Wywołany z linii poleceń tak:
D:\java>java Out tekst1 tekst2 tekst3>out.txt
daje w pliku out.txt treść:
tekst1
tekst2
tekst3

0
chodnik napisał(a)

Wywołany z linii poleceń tak:
D:\java>java Out tekst1 tekst2 tekst3>out.txt

I tu sie nie rozumiemy bo ja chce wywolac ten programik Out (swoja droga bardzo dobry przyklad choc ja akurat uruchamiam ".exe") w innym programiku np. CallOut za pomoca:
Runtime runt=Runtime.getRuntime();
Process proc=null;
proc=runt.exec(commandLine);

gdzie commandLine to tablica ze stringami "java", "Out", "tekst1" itd. Niestety jak tutaj dodasz na koncu do commandLine ">out.txt" to juz nie dziala. I o to sie wlasnie rozchodzi...

Jakies inne pomysly?

0

Rzeczywiście nie zrozumiałem do końca, chociaż miałem wątpliwości przy pisaniu odpowiedzi czy na pewno o to chodzi. Ale teraz już chyba wiem o co chodzi. Więc jest program exe, który robi to, co ten poprzedni w javie. Program nazywa się cmdline.exe i w C++ wygląda tak:

#include <iostream>
using namespace std;
int main(int argc, char**argv){
ios_base::sync_with_stdio(0);
for(int i=0; i<argc; i++)
cout<<argv[i]<<endl;
return 0;
}

Poniższy kod wypisze na ekranie to co robi exec i zapisze to do pliku "nazwa.txt". Trzeba jeszcze trochę pokombinować, bo w tej postaci błędnie zapisuje końce linii. Ale ogólnie chyba o to chodzi.

import java.io.*;
public class CmdToF {

public static void main(String argv[]) {
    try {
     String s;
     String[] cmd={"cmdline", "pierwszy", "drugi", "trzeci"};
     Process p = Runtime.getRuntime().exec(cmd);
     BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
     OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(new File("nazwa.txt"), true));//,Charset.forName("utf-8")
     
     while ((s = br.readLine()) != null) {
       System.out.println(s);
       osw.write(s, 0, s.length());
       }
     
     osw.close();
     br.close();
     }
    catch (Exception e) {
     e.printStackTrace();
     }
  }
}
0

No i dziala :-)

Dzieki bardzo!

O to chodzilo!

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