Thread Programm aus perl starten und Ausgabe auslesen (2 answers)
Opened by MickiM at 2006-09-13 21:41

Dubu
 2006-09-14 12:41
#69853 #69853
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Deine Kommandozeile, wie du sie in Perl zusammensetzt, wird auch nur an die Shell übergeben. Perlvariablen, die dabei in der Kommandozeile auftauchen, werden natürlich vorher expandiert. Eventuell musst du deine Parameter daher genauso quoten, wie du es in der Shell machst, z.B. mit einfachen Anführungszeichen.
In renees Vorschlag sähe das dann so aus, vorausgesetzt $progname enthält den Pfad/Namen des Programms und $parameter deinen Parameter:
Code: (dl )
my $return = qx{$programm '$argument'};


Komplizierter, aber auch sicherer ist es, wenn man fork & exec benutzt, um den Kindprozess zu starten. Das folgende Beispiel ist aus perlipc, Abschnitt "Using open() for IPC":
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       Here&’s a safe backtick or pipe open for read:

          # add error processing as above
          $pid = open(KID_TO_READ, "-|");

          if ($pid) {   # parent
              while (<KID_TO_READ>) {
                  # do something interesting
              }
              close(KID_TO_READ) || warn "kid exited $?";

          } else {      # child
              ($EUID, $EGID) = ($UID, $GID); # suid only
              exec($program, @options, @args)
                  || die "can&’t exec program: $!";
              # NOTREACHED
          }

View full thread Programm aus perl starten und Ausgabe auslesen