Komunikacja z zewnętrznym programem - Runtime exec

0

Witam, mam pytanie odnośnie komunikowania się z innym programem, przykładowo CMD.
O co konkretnie mi chodzi?
Uruchamiam sobie cmd z jakąś komendą, przechwytuję jego odpowiedź, i chciałbym później znowu dać mu jakieś polecenie do wykonania, ale nie bardzo wiem jak to zrobić aby nie trzeba było wszystkiego robić pod początku. Mam teraz taki kod:

                
String[] cmds = { "cmd"};
String s;

Process p = Runtime.getRuntime().exec(cmds);

BufferedReader br = new BufferedReader(new InputStreamReader(
		p.getInputStream()));

while ((s = br.readLine()) != null) {
		System.out.println(s);
}

I jak teraz dać mu kolejne polecenia do wykonania?
Próbowałem coś robić za pomocą OutputStreamWriter, ale nic nie wyszło, więc albo w inny sposób to trzeba robić, albo źle to zrobiłem.
Byłbym wdzięczny za pomoc. :)

0

Jako argument metody exec klasy runtime możesz zastosować tablicę stringów np:
{"cmd.exe", "/c", "ipconfig /all"};

wówczas masz już cały proce.

Wrzucasz to do BufferedReader:
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

i odczytujesz:

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

0

remigio, tak, wiem o tym, ale mi chodzi o to, że jeśli wykonam jedno polecenie i dostanę na nie odpowiedź, i chcę później wykonać kolejne, to czy da radę jakoś w prosty sposób je przekazać do CMD, czy trzeba od nowa całą tablicę uzupełniać itd.
Dla przykładu:

  1. Wysyłam do CMD jakieś tam polecenie w tej tablicy
  2. dostaję odpowiedź
  3. na podstawie odpowiedzi chcę ustalić, jakie polecenie ma następne wykonać.

Chodzi mi o coś w stylu tego, jakbym po prostu otworzył CMD i pisał w nim komendy i wciskał enter. Bo ta tablica to jest coś w stylu pisania .bat i po prostu otwieranie go, a ja chcę mieć tak jakby połączenie z tym programem cały czas i na bieżąco mu podsyłać nowe polecenia i odczytywać rezultaty.

0

A może użyj dokumentacji i głowy? Zobacz, jest getInputStream i służy do odczytania danych, to może jest i getOutputStream i służy do zapisu? Poszukaj w internecie, wykaż się inwencją, a nie programujesz przez forum.

0

Próbowałem z getOutputStream i napisałem, że albo zrobiłem to źle, albo nie działa, możliwe, że to pierwsze. Szukałem również w internecie i niestety nie znalazłem, dlatego napisałem tutaj. Nie wykorzystuję forum jako pierwszego miejsca jak czegoś nie potrafię, tylko jeśli naprawdę już nie mam pojęcia jak to zrobić, a w internecie nic nie znalazłem (bardzo możliwe, że źle szukam).
Próbowałem w taki sposób:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
		bw.write(// komendy); 

Tylko nie bardzo znowu mi pasuje używanie Process p przy tym streamie, jak i również przy następnym odbiorze, bo w końcu wywołuje on cały czas tą samą tablicę z Runtime exec, a nie wiem czym innym go mogę zastąpić.

Wiem, że moje pytania mogą wydawać się idiotyczne, no ale raczej każdy kiedyś był na podobnie niskim poziomie jak ja teraz. ;)

0

Jest bardzo pożyteczna funkcja inheritIO. Pozwala ona pisać i czytać bezpośrednio z konsoli netbeans/eclipse.

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