Stella: Perl Shell-Befehl ohne Ausgabe ausführen

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

  1. Moin!

    system und exec geben den output direkt aus.

    Aha. Was macht

    $var=befehl;

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. 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

      1. 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

        1. 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

          1. 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

            1. 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
              
              1. 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

                1. 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

                  --
                  Serialize ist um die Zeit das Stichwort: Ab ins Bett ;-)
                  1. 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

                    --
                    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
      2. 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.