Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5882[/thread]

Zwei Perl Scripte nacheinander ausfuehren



<< >> 10 Einträge, 1 Seite
Gast Gast
 2003-11-06 11:45
#69717 #69717
Hallo zusammen,

ich habe zwei scripte, von denen das erste eine neue Datei erzeuget, die im zweiten verwendet wird. Beide Scripte sollen nacheinander laufen und aus einer Kommandozeile mit mehreren Parameter aufgerufen werden.
Falls die Parameter falsch oder unvollstaendig sind, soll die Hilfe ausgegeben werden.

Wie macht man so was am besten?

Danke, Aly
Crian
 2003-11-06 11:46
#69718 #69718
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Du könntest sie von einer Batchdatei aus aufrufen, wo Du die Parameter angibst.

Alternativ könntest Du auch das erste Skript nach STDOUT schreiben und das zweite von STDIN lesen lassen und die Skripte per Pipe verbinden, falls Du die erzeugte Datei nicht anderweitig brauchst.\n\n

<!--EDIT|Crian|1068112060-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2003-11-06 11:48
#69719 #69719
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Guest,06.11.2003, 10:45]Falls die Parameter falsch oder unvollstaendig sind, soll die Hilfe ausgegeben werden.

Wie macht man so was am besten?[/quote]
Oder war die Frage zu diesem Teil?

Dafür benutze ich meistens zwei Funktionen "param" und "syntax", etwa so:

Code: (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
use Getopt::Std;        # Bearbeiten der Aufrufparameter mit getopts().
use File::Basename; # für basename()

[...]

param();

[...]

sub param {
our ($opt_h, $opt_w) = ('', '');

syntax('Unbekannte Optionen') unless getopts('hw');
syntax() if $opt_h;
$Config{angedockt} = length($opt_w) ? 0 : 1;
} # sub param


sub syntax {
print STDERR "Fehler:\n\t", @_, "\n" if scalar(@_);

print "Syntax:\n\n\t", basename($0), " [-h] [-w]\n\n",
"Optionen:\n",
" h : Gibt diesen Hilfetext aus.\n",
" w : Im eigenen Fenster (nicht angedockt)\n";

exit scalar @_;
} # sub syntax


Hier siehst Du einen Auszug aus einem Programm mit den Parametern h und w, h gibt Hilfe aus, w ist ein Switch. Man kann auch Parameter mit Werten verarbeiten... (frag dazu ggf. nach, wenn Du aus perldoc nicht schlau wirst).

In param wird abhängig davon, ob w gesetzt wird oder nicht, ein Wert im globalen Konfigurationshash %Config geändert. (Wurde vorher beim Programmstart standardmäßig auf Null gesetzt.)\n\n

<!--EDIT|Crian|1068112498-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
havi
 2003-11-06 11:52
#69720 #69720
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Du kannst die Parameter abfragen!

Bsp.:

Code: (dl )
print "Hilfe\n" if $ARGV[0] ne "Irgendetwas";


Gruss
Crian
 2003-11-06 11:57
#69721 #69721
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Schon, aber wenn es viele sind ist Getopt::Std wohl doch etwas handlicher.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Aly
 2003-11-06 12:09
#69722 #69722
User since
2003-11-06
2 Artikel
BenutzerIn
[default_avatar]
Danke fuer die schnelle Reaktion. Ich will es mit Getopt probieren. Heisst es man schreibt eine dritte Datei, aus der man die anderen dann ausfuehrt?
Habe bis jetzt eine Bash-Datei verwendet. Damit funktioniert, nur die Parameterbehandlung gelingt nicht besonders gut.
Crian
 2003-11-06 12:31
#69723 #69723
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Möchtest Du denn der Batchdatei, die die beiden Perlskripte aufruft, auch Parameter mitgeben können (die diese dann an die Perlskripte weitergibt)?

Du schriebst bash-Skript, ist es für die bash unter Linux? Wenn ja, kannst Du auch da recht schön Parameter verwalten, der Befehl dafür hieß glaub ich auch getopt, ein Beispiel müsste ich aber erst von zu Hause mitbringen...

Alternativ nimm statt der Batchdatei ein drittes Perlskript, das die Parameter wiederum mit getopt verarbeitet und im wesentlichen nur die beiden anderen Skripte per system o.ä. aufruft.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Aly
 2003-11-06 12:37
#69724 #69724
User since
2003-11-06
2 Artikel
BenutzerIn
[default_avatar]
Genau, bash unter Linux. Waere dankbar fuer den Befehl, wie man die Parameter verwaltet. Sie werden einmal vom Benutzer eingegeben:

datei.bash quelledatei.txt zusatzdatei.txt 4 6 zieldatei.txt

und danach teilweise in beiden scripten verwendet.
Was ist denn vorzuziehen: bash oder die dritte perl datei?
Aly
format_c
 2003-11-06 13:01
#69725 #69725
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Schau mal hier:
http://links.perl-community.de/

Kategorie Weitere Programmiersprachen (Manuals, Referenzen, Tutorials usw.)

Gruß Alex\n\n

<!--EDIT|format_c|1068116613-->
Crian
 2003-11-06 14:22
#69726 #69726
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wenn Du keine aufwändigen Optionen verwalten willst, kannst Du einfach auf $1 .. im Shellskript zugreifen. Ich dachte, Du wolltest komplizierteres erreichen...

Unter der Bash kannst Du auch einfach alle Aufrufparameter an ein Programm (Dein Perlskript) weitergeben, die Syntax dafür hab ich leider nicht mehr im Kopf, ev. war es $@, ich weiß es aber nicht mehr genau.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 10 Einträge, 1 Seite



View all threads created 2003-11-06 11:45.