Perl Shell-Befehl ohne Ausgabe ausführen
Stella
- perl
Hi!
ich möchte in perl ein Shell-befehl ausführen. Die Ausgabe des Befehls soll nicht ausgegeben werden, ich möchte nur den Status-Code und den Outout in unterschiedlichen Variablen speichern.
system und exec geben den output direkt aus.
Stella
Moin!
system und exec geben den output direkt aus.
Aha. Was macht
$var=befehl
;
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
system und exec geben den output direkt aus.
Aha. Was macht
$var=
befehl
;
speichert den output in die Variable. Wie kann ich bei dieser methode auf den Status-Code zugreifen?
Stella
Moin!
$var=
befehl
;
speichert den output in die Variable. Wie kann ich bei dieser methode auf den Status-Code zugreifen?
Ganz einfach:
$var=befehl 1> /dev/null 2> /dev/null; echo $?
;
$? gibt in vielen Unix/Linux-Shells (sh, bash, ksh...) den exit-Code des zuletzt aufgerufenen Befehles zurück.
Oder Du machst es so wie hier vorgeschlagen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
$var=
befehl
;
speichert den output in die Variable. Wie kann ich bei dieser methode auf den Status-Code zugreifen?Ganz einfach:
$var=
befehl 1> /dev/null 2> /dev/null; echo $?
;$? gibt in vielen Unix/Linux-Shells (sh, bash, ksh...) den exit-Code des zuletzt aufgerufenen Befehles zurück.
Oder Du machst es so wie hier vorgeschlagen.
damit hab ich dann nur den Status-Code, jedoch nicht den Output.
Ich möchte den Status-Code _und_ den Output.
Bei python, läßt sich dies mit commands.getstatusoutput(command) erreichen.
Stella
Moin!
$var=
befehl 1> /dev/null 2> /dev/null; echo $?
;
Ich möchte den Status-Code _und_ den Output.
#! /usr/bin/perl
$ausgaben=`wc test.pl`;
$statuscode=`echo $?`;
print "Ausgaben: ";
print $ausgaben;
print "\n";
print "Statuscode: ";
print $statuscode;
print "\n";
print "\n";
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
$var=
befehl 1> /dev/null 2> /dev/null; echo $?
;
Ich möchte den Status-Code _und_ den Output.
#! /usr/bin/perl
$ausgaben=
wc test.pl
;
$statuscode=echo $?
;print "Ausgaben: ";
print $ausgaben;
print "\n";
print "Statuscode: ";
print $statuscode;
print "\n";
print "\n";
hm... OK. da hätte ich auch selber drauf kommen können :-)
Stella
Moin!
hm... OK. da hätte ich auch selber drauf kommen können :-)
Ja und Nein. So ganz einfach war das gar nicht. Das Problem besteht einerseits darin, dass Du nie einen Array zurückerhalten kannst, Du müsstest Daten also irgendwie serialisieren. Das gänge natürlich auch irgendwie... wenn man zuerst den exitCode und dann die Ausgaben zurück gibt. Andererseits besteht das Problem darin, dass ich auch nicht so ganz genau weiß was der Backtick-Operator ganz genau treibt. Wenn der jedesmal eine neue System-Instanz (oder shell) startet, dann sind die Inhalte $-Variablen beim nächsten Aufruf sämtlich vergessen.
Ich missbrauche das Forum hin und wieder dafür Lösungen für Probleme zu finden die ich gar nicht habe um mich dann von den gefundenen Lösungen zu irgendwas inspirieren zu lassen. Perl war mal wieder interessant, außerdem ist der Rolf Rost wohl gerade nicht da.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
moin,
... außerdem ist der Rolf Rost wohl gerade nicht da.
Doch schon, hast Dich tapfer geschlagen lieber fastix (aus Kassel). Im Prinzip steht ja alles auf der Python-Seite, so wie ich das flüchtig überflogen habe, 2>, 1>; $?, $! usw. ist dann für Perl interessant.
$? alternativ: $CHILD_ERROR
$! alternativ: $OS_ERROR, $ERRNO
Wenns tatsächlich mal in die Shell gehen soll, use Shell; mal anschauen.
Viele Grüße,
schönen Sonntag,
ob 4:1 oder 4:2, es war ein schönes Spiel, auch im PKW gut anzuhören,
möge der Beste gewinnen.
Horst Hurtig
Hi!
ob 4:1 oder 4:2, es war ein schönes Spiel, auch im PKW gut anzuhören,
Anzusehen war es erst richtig schön.
off:PP
Befindet sich als Nebeneffekt (à la C) in $CHILD_ERROR, zur Behandlung siehe system.
fastix kennt sich leider nicht aus - ein Shell-echo ist nicht nötig.