Thread Starten von Programmen nach Erstellung eines Files (14 answers)
Opened by giordani at 2010-07-07 11:12

Gast wer
 2010-07-08 09:08
#139663 #139663
Wenn die Scripte so alleine stehen kann man das aber auch etwas eleganter schreiben.

createCount.pl:
Code (perl): (dl )
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";


Code (perl): (dl )
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! $!));


Wie ich das Problem lösen würde:

Code (perl): (dl )
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);
}

Last edited: 2010-07-08 09:57:03 +0200 (CEST)

View full thread Starten von Programmen nach Erstellung eines Files