Thread system() richtig benutzen (6 answers)
Opened by cbxk1xg at 2013-02-16 16:59

Linuxer
 2013-02-16 23:24
#165835 #165835
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Naja, wirklich aufrufen tust Du nur ein Programm, nämlich xvfb-run.
Das nimmt dann eine Argumentliste und startet dann das entsprechende Programm, das in der Argumentliste enthalten ist.

Um nicht in die Quoting-Falle zu tappen, würde ich mal das Kommando als Liste übergeben. Was ist, wenn Deine $source und $destination Leerzeichen enthalten? Wenn Du Elemente des Kommandos als Liste übergibst, ist eine $source auch mit Leerzeichen nur ein einzelnes Argument.
Das Kommando wird außerdem direkt gestartet, ohne dass eine Shell-Instanz gestartet wird, die auch nochmal interpretieren will.

Es ist ausserdem sinnvoll, den Rückgabewert zu überprüfen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my @cmd = (
  'xvfb-run',
  "--server-args='-screen 0, 1024x768x24'",
  'wkhtmltopdf'
  $source,
  $destination,
);

system( @cmd ) == 0 
  or die "Command <<@cmd>> not successful: $!\n";


Deine "lustigen" Zeichen schauen nach Kodierungsproblemen aus; UTF8 vs iso-8859-* .
Möglicherweise enthält die Originaldatei bereits fehlerhaft kodierte Zeichen? Evtl. sind die Kodierungsangaben im HTML falsch? Schwer zu raten...
Da mögen andere mit mehr Wissen dazu sich zu äußern.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread system() richtig benutzen