Schrift
[thread]6751[/thread]

system vs. qx{}: Retuncod und Prog. Ausgabe gleichzeitig



<< >> 3 Einträge, 1 Seite
roli
 2005-03-01 19:43
#52218 #52218
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi Forum,

ich habe ein Problem, wie sollte es auch anders sein, wenn man hier was schreibt ...
Ich mochte in meinem Perl Script Systembefehle (Linux) ausfuehren. Meine erste Idee war "system", geht auch gut, bis auf eine Kleinigkeit, als Rückgabe erhalte ich "nur" den Retuncode des ausgeführten Befehls, nicht den Output. Also mal schnell "perldoc -f system" aufgerufen und siehe da:
Code: (dl )
This is not what you want to use to capture the output from a command, for that you should use merely backticks or "qx//", as described in "`STRING`" in perlop.

=> Kuckst du weiter!
"qx//" sieht da schon besser aus:
Code: (dl )
The collected standard output of the command is returned; standard error is unaffected.  In scalar context, it comes back as a single (potentially multi-line) string, or undef if the command failed.

Na prima, hier habe ich den STDOUT, STDERR interessiert mich im Moment nicht, nur wie jetzt an den Retuncode kommen?
Und was mache ich, wenn ich STDERR doch mal brauche?

Fuer jeden Tip dankbar

Roland
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
pq
 2005-03-01 19:51
#52219 #52219
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=roli,01.03.2005, 18:43]Na prima, hier habe ich den STDOUT, STDERR interessiert mich im Moment nicht, nur wie jetzt an den Retuncode kommen?
Und was mache ich, wenn ich STDERR doch mal brauche?[/quote]
returncode steht in $?
stderr: umleiten (wie, steht auch in perlop)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
ptk
 2005-03-01 21:08
#52220 #52220
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hier kann man mal Werbung fuer CPAN:IPC::Run machen. Damit kann man stdin/out/err-Umleitungen und komplizierte Pipes sehr einfach gestalten. Umleitungen werden so gemacht:
Code: (dl )
run ["kommando", "mit", "parametern"], \$in, \$out, \$err;

wobei die Eingabe (stdin) in $in stehen sollte und nach der Abarbeitung stdout und stderr in $out und $err stehen. Ausserdem kann man run ... or die schreiben, nicht wie bei system(), wo man eigentlich and statt or benutzen muesste.

Wenn man eine Pipe verwenden will und dabei nicht auf die Sicherheit der List-Schreibweise verzichten will, kann man
Code: (dl )
run ["erstes_kommando", "mit", "parametern"], "|", ["zweites_kommando", "mit", "parametern"]

schreiben.

Die Manpage erschlaegt einen, weil IPC::Run so viel kann, aber es lohnt sich!
<< >> 3 Einträge, 1 Seite



View all threads created 2005-03-01 19:43.