Archiv verlassen und diese Seite im Standarddesign anzeigen : Mittels Java Befehle auf der Konsole ausführen
invis-eo
11-03-2004, 15:33
Hallo zusammen
Ich möchte mir gerne ein kleines gentoo-uninstall-script basteln. Wenn ich z.b. ein bestimmtes Programm nicht mehr benötige, kann ich normal mittels "emerge unmerge xxx* das programm entfernen. leider können die bibliotheken, welche nur von diesem Programm benötigt werden nicht entfernt werden, da dies das portage system von gentoo noch nicht unterstützt. Nun möchte ich mittels java diese befehle auf die konsole loslassen. also ich will, dass mein programm, nachdem ich ihm gesagt habe, was er löschen soll, die e-builds durchsucht, dann auflistet welche bibliotheken in keinem von mir installierten paket mehr gebraucht werden, und diese nach einer bestätigung automatisch über "emerge unmerge xxx" löscht.
Nun, kann mir jemand sagen, wie ich java dazu bringe befehle auf der konsole auszuführen und es sollte auch die ausgaben des jeweiligen befehls ausgeben.
Ist dies überhaupt möglich?
Hab leider nichts gefunden was mir geholfen hätte...!
p.s. ich weis, es gäbe sicherlich bessere sprachen dafür. Nur wir lernen in der Schule Java und sowas in der art könnte ich schon lange gebrauchen.
Vielen Dank
Mattburger
11-03-2004, 15:39
Hi invis-eo,
hier eine Vorlage für dein vorhaben:
/** To get the envirnment- settings.<br>
* Here we use the printenv-command to retrieve the envirnment settings.
* If the OS does not return the envirnment-settings with this command,
* you should create a script or barch-file with the name printenv, which
* calles the corresponding command of the OS. */
protected void getenvirnment( ) {
try {
Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "printenv" };
Process child = rt.exec(callAndArgs);
BufferedReader envin = new BufferedReader( new InputStreamReader(child.getInputStream()));
String s;
while ( ( (s=envin.readLine()) != null) ) {
configline( "ENV", s );
}
envin.close();
}
catch (IOException e ) {
}
}
invis-eo
11-03-2004, 15:59
Hab das mal folgendermassen für nen ersten test eingegeben:
class test{
protected void getenvirnment( ) {
try {
Runtime rt = Runtime.getRuntime();
String[] callAndArgs = { "printenv" };
Process child = rt.exec(callAndArgs);
BufferedReader envin = new BufferedReader( new InputStreamReader(child.getInputStream()));
String s;
while ( ( (s=envin.readLine()) != null) ) {
configline( "ENV", s );
}
envin.close();
}
catch (IOException e ) {
}
}
public static void main (String[] arg){
getenvirnment();
}
}
Nun, hab da diverse errors... kann es sein dass ich da was falsch kopiert habe, oder kann ich das so nicht aufrufen?
Und noch ne frage, wo kann ich den Befehl eingeben, welcher ausgeführt werden soll? Ich bin mir da nicht sicher aber wird der Befehl von der Tastatur abgefragt (wegen BufferedReader envin = new BufferedReader( new InputStreamReader(child.getInputStream())); oder was macht das sonst?)?
Danke aufjedenfall schonmal!
peschmae
11-03-2004, 18:54
bei Runtime.getRuntime().exec() kannst du die Befehle zum Ausführen angeben.
Damit das Zeugs läuft musst du n Objekt der Klasse erzeugen (sonst müsste die Methode static sein) - allerdings sollte die Methode dann vernünftigerweise public und nicht protected sein (wie kommst du überhaupt auf protected!?)
in main sowas:
(new test()).getenvirnment();
Zum lesen:
www.javabuch.de (deutsch) und von den technischen Sachen detailierter und besser
www.bruceeckel.com (Thinking in Java)
MfG peschmä
invis-eo
11-03-2004, 20:29
ok, dann werd ich das ganze mal mit public static austesten.
Wegen den java-seiten, die kenn ich schon, hab auch selbst ein buch... wir beginnen erst demnächst mit den objektorientierten sachen daher hab ich noch keinen blassen wegen dem static und so (ok public kann ich erahnen..). hab gedacht, dass ich das einfach übernehmen kann!
Danke für die Hilfe!
Mattburger
12-03-2004, 08:45
Hi invis-eo
hast du die imports angegeben ?
Hier die Liste:
import java.io.*;
import java.util.*;
import java.lang.Runtime.*;
anda_skoa
12-03-2004, 10:39
es reicht
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
SecurtityException, Runtime und Process sind in java.lang und damit automatisch verfügbar.
Bei Aufrufen mit mehreren Argumenten empfiehlt es sich, die exec() Version mit dem String[] Parameter zu benutzen und jedes Argument in einem extra Element des Arrays unterzubringen.
Besonders wenn zB Leerzeichen in den Argumenten enthalten sind (Dateinamen, etc)
Ciao,
_
invis-eo
12-03-2004, 11:39
stimmt... ich müsste natürlich noch die imports angeben...! vielen dank für den hinweis!
werd das am weekend dann testen!
Danke für eure freundliche Hilfe!
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.