Thread Linux: Ausgabe von system() in Datei umleiten (16 answers)
Opened by odium at 2010-09-23 10:27

torsten
 2010-09-23 13:22
#141500 #141500
User since
2010-08-16
45 Artikel
BenutzerIn
[Homepage] [default_avatar]
2010-09-23T10:59:03 odium
Also der original Aufruf sieht etwa so aus:

Code: (dl )
system('script','-m','test.list','-s', $outlistfile,'--nolabels','--viterbi','>','outfile.xml');


Dein Problem ist, dass Du >outfile.xml von der Shell interpretiert haben willst. Das funktioniert nur, wenn Du genau einen String an system übergibst, also

Code (perl): (dl )
system('script -m test.list -s '.$outlistfile.' --nolabels --viterbi >outfile.xml');


Dabei musst Du Dich aber darum kümmern, dass $outfilelist keine Shell-Sonderzeichen enthält.

Daher finde ich folgendes besser (ungetestet, soll nur den Gedanken demonstrieren):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $pid;
select undef, undef, undef, 0.1 until defined($pid=fork);    # stellt sicher, dass fork() auch klappt
unless($pid) {
  close STDOUT;
  open STDOUT, '>', 'outfile.xml' or die;
  exec 'script','-m','test.list','-s', $outlistfile,'--nolabels','--viterbi';
  # hier sollten wir nicht landen, es sei denn exec() geht schief.
  exit -1;
  # zur Sicherheit kann man hier auch mehr Varianten des Beendens implementieren, z.B:
  # kill KILL=>$$;
  # POSIX::_exit -1;
}
waitpid $pid;
$rc=$?;

View full thread Linux: Ausgabe von system() in Datei umleiten