einfaches Perl-Skript aufrufen

Status
Nicht offen für weitere Antworten.

puck

Mitglied
Ich habe leider wieder so eine kleines Newbie-Problem. Wage es schon gar nicht mehr hier einzufügen 😳

Aber ich versuche hiermit eine Einfaches Perl-Skript aufzurufen.
Code:
 import java.io.*;
//import java.lang.*;
//import java.lang.Runtime.*;

public class Perlstarter
{
 public static void main(String[] args) throws IOException, InterruptedException
 {
 	  int rueck_gabe = 0;
 	  String cmd1 = "/home/chris/perl/runtest.pl";
 	  Runtime rt = Runtime.getRuntime(); 
 	  Process myproc = rt.exec( cmd1 ); 
 	  rueck_gabe = myproc.waitFor();
 	  System.out.println("die rueckgabe war: " + rueck_gabe );
 }
 
}

Das Programm lässt sich kompilieren und auch aufrufen. Keine Fehler.
Auch das Perlskript läuft. Es öffnet einfach eine Datei, schreib die Zeit ( Sekunden und Minuten) hinein und schliesst es wieder. Leider passiert gar nichts. Die Rückgabe ist zwar immer 0, aber der Inhalt der Datei ändert sich nicht, was er schon tut, wenn ich das Perl-Skript über die Shell aufrufe.

Was habe ich vergessen?

Gruss Christian
 
java kann für dich NICHT den #! ausführen

entweder du rufst den perl interpreter direkt auf

/usr/bin/perl /home/chris/perl/runtest.pl

oder du wirfst eine shell an...
 
Den String habe ich abgeändert in
Code:
 String cmd1 = "/usr/bin/perl /home/chris/perl/runtest.pl";

aber das Ergebnis ist das gleiche.
 
Anstatt die Exceptions weiterzuleiten, empfehle ich Dir diese mal auszugeben!

Ändere deinen Code derart ab:
Code:
    try {
      int rueck_gabe = 0;
      String cmd1 = "/home/chris/perl/runtest.pl";
      Runtime rt = Runtime.getRuntime();
      Process myproc = null;
      myproc = rt.exec( cmd1 );
      rueck_gabe = myproc.waitFor();
      System.out.println( "die rueckgabe war: " + rueck_gabe );
    } catch( IOException ioexc ) {
      ioexc.printStackTrace();
    }
    catch( InterruptedException intexc ) {
      intexc.printStackTrace();
    }
 
Immerhin die Rückgabe ist jetzt nicht mehr 0 sondern 2. Aber einen Stacktrace findet nicht statt. Was genau schief läuft, erfährt man nicht.
 
columbus hat gesagt.:
Den String habe ich abgeändert in
Code:
 String cmd1 = "/usr/bin/perl /home/chris/perl/runtest.pl";

aber das Ergebnis ist das gleiche.
gib das mal auf der Console ein...
 
gib das mal auf der Console ein...

Also das Programm wurde normal ausgeführt, wenn Du das meinst.

Ich habe jetzt mal statt dem Perl Skript ein C-Programm erstellt zum aufrufen. Es macht im wesentlichen das gleiche öffnet eine Datei, schreibt die Uhtzeit rein ( was ja noch nicht mal notwendig ist, denn man kann an den Dateiattributen ja erkennen, wann die Datei das letzte mal geöffnet wurde ) und schließt sie wieder. Wenn ich das Programm direkt aufrufe, wird die Datei geöffnet ( sichtbar eben an den Attributen ) wenn ich es über den Java-Prozess starte, dann nicht ! :?

Gruss Christian
 
Und wies ausschaut war der Fehler bei mir. Ich habe zwar die Executables, die ausgeführt werden, mit einem absolten Pfad angegeben.
Aber nicht die Dateien, auf die zugegriffen werden sollte. Und da ich das Java-Programm in einem anderen Verzeichnis ausgeführt habe, wie das "Ziel-Programm", konnte das nicht funktionieren. Das habe ich geändert, das heist die Dateien, auf die ich zugreife mit absoluen Pfad angegeben.... jetzt läufts!

Gruss Christian
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben