Leser: 26
1
2
3
4
1. führe "Programm A" aus
2. führe "Programm B" aus, welches log.txt erstellt
3. führe "Programm C" aus, welches log.txt auswertet
...
1
2
3
4
5
6
7
$directory = "E:/Benutzer/06simulation/proc/";
system("$directory"."01runInitElthetaBatchScript.ahk");
sleep(2);
system("$directory"."02runBatchScript.ahk");
# hier warten, bis file erstellt wird dann weiter mit
system("$directory"."03procInitElthetaOut.pl");
# etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use strict; use warnings; use File::Spec::Functions qw( catdir catfile ); # Arbeitsverzeichnis, wo die Programme liegen my $dir = 'E:/Benutzer/06simulation/proc'; # stelle die notwendigen Kommandos in einem Hash zusammen; # Pfade werden mit catfile zusammengebaut; http://search.cpan.org/perldoc?File::Spec::Functions my %cmd = ( init => catfile( $dir, "01runInitElthetaBatchScript.ahk" ), batch => catfile( $dir, "02runBatchScript.ahk" ), analyze => catfile( $dir, "03procInitElthetaOut.pl" ), ); # Fuehre Kommandos einzeln aus; prüfe Erfolg; sterbe bei Misserfolg system( $cmd{init} ) == 0 or die "execution of "$cmd{init}" failed: $!\n"; system( $cmd{batch} ) == 0 or die "execution of "$cmd{batch}" failed: $!\n"; system( $cmd{analyze} ) == 0 or die "execution of "$cmd{analyze}" failed: $!\n"; __END__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ordner = "E:/Test/testordner/";
opendir ORDNER,"$ordner" || die "opendir von ORDNER nicht möglich";
@files = ("test1.txt","test2.txt");
foreach $file (<$ordner*>) {
unlink $file;
}
sleep(10);
foreach $file (@files) {
open OUTPUT, ">$ordner".$file;
}
@files = readdir ORDNER;
$x = @files;
print "number of files: $x\n";
close ORDNER;
1
2
3
4
5
6
7
8
9
10
$directory = $ordner = "E:/Test/testordner/";
$file = "test2.txt";
print "Zuerst wird einige Sekunden gewartet.\n";
sleep(2);
print "Jetzt createCount.pl gestartet.\n";
system("createCount.pl");
until (-e $directory.$file) {
print "Das File test2.txt ist noch nicht erstellt.\n"; # das wird nicht angezeigt auf der Konsole. Verstehe ich nicht, aber kann damit leben.
};
print "Nun ist test2.txt erstellt.\n";
QuoteDann startet Deine until() Schleife, die solange ausgeführt werden soll, bis die gewünschte Datei existiert. Das tut sie jetzt bereits schon, also wird die Schleife nicht ausgeführt und Deine Ausgabe erfolgt nicht.
QuoteDein opendir()-Aufruf ist unglücklich; Wenn Du '||' verwenden willst, klammere bitte die Argumente des opendir() oder lass die Klammern weg und verwende 'or' anstatt '||'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/perl use strict; use warnings; # alle nötigen Parameter von der Kommandozeile lesen: die("Nicht genug Argumente!\n") if(@ARGV<2); # Arbeitsverzeichnis lesen my $ordner = shift(@ARGV); # Datei-Namen lesen my @files = @ARGV; # Ordner muss existieren! die("Arbeitsverzeichnis existiert nicht!\n") if(!-d $ordner); # Es muss mindestens eine Datei angeben sein die("Keine Dateien Angeben!\n") if(!@files); # alte Dateien löschen. for my $file (glob("$ordner*")){ if(-f $file){ unlink($file) or die("Konnte Datei $file nicht löschen! ($!)\n"); } else{ die("Kann $file nicht löschen! Es ist keine Datei!\n"); } } # neue leere Dateien anlegen for my $file (@files) { open(my $fh, '>', $ordner.$file) or die("Kann Datei $ordner$file nicht anlegen ($!)\n") close($fh); } print "number of files: ".scalar(@files)."\n";
1 2 3 4 5 6 7 8 9
#!/usr/bin/perl use strict; use warnigs; my $ordner = "E:/Test/testordner/"; my @files=("test1.txt","test2.txt"); print "Jetzt createCount.pl gestartet.\n"; system('createCount.pl', $ordner, @files)==0 or die(qq(Konnte "createCount.pl $directory @files" nicht erfolgreich ausführen! $!));
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#!/usr/bin/perl use strict; use warnings; use File::Spec::Functions qw( catdir catfile ); # Arbeitsverzeichnis, wo die Programme liegen my $ordner = 'E:/Benutzer/06simulation/proc'; # Logfile das analysiert werden soll my $logfile='log.txt'; # timeout my $maxwait=120; # Sekunden maximal auf Datei warten runn('01runInitElthetaBatchScript.ahk'); # nach dem "init" ein paar Sekunden warten um sicher zu sein, # dass die Einstellungen übernommen wurden: sleep(2); runn('02runBatchScript.ahk'); # so lange warten bis die Datei existiert, # oder die Zeit abgelaufen ist. my $timeout=time()+$maxwait; until(-e $logfile) { # immer eine Sekunde warten sleep(1); # Abbruch wenn die maximale Zeit gewartet wurde. die("$logfile wurde nach $timeout Sekunden noch nicht erstellt!\n") if($timeout <= time()); } # noch kurz waren um sicher zu stellen, das die Datei vollständig geschrieben wurde. sleep(1); runn('03procInitElthetaOut.pl'); #################################################### # Funktionen sub runn { my $cmd=shift; my $prog=catfile( $ordner, $cmd); # Fuehre programm aus: system( $prog ) == 0 or die qq(Programm "$prog" brach ab: $!\n); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#! /usr/bin/perl use strict; use warnings; # verwende Pfad zur Skriptdatei my $file = $0; ### versuche nun, eine Datei als Verzeichnis zu oeffnen ### opendir muss dadurch fehlschlagen # erzeugt keine Fehlermeldung! opendir DIR, $file || warn "1. opendir failed: $!\n"; # Fehlermeldung opendir DIR, $file or warn "2. opendir failed: $!\n"; # Fehlermeldung opendir( DIR, $file ) || warn "3. opendir failed: $!\n"; __END__