Schrift
[thread]6320[/thread]

Ausführen externer Kommandos mit Backticks: Fragst du da Fehler ab? (Seite 2)

Leser: 2

Question: Ausführen externer Kommandos mit Backticks: Fragst du da Fehler ab?
Nein, weiss nicht, wie das geht
Nein, ist mir zu viel Tipperei
Fast nie
Gelegentlich
Meistens
Immer
You have to log in to vote.
39 voter(s) so far


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Crian
 2004-06-10 04:20
#83178 #83178
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Ich hab auch "meistens" gewählt, besser wäre wohl "in fast allen Fällen" (mit fast alle = alle bis auf endlich viele ;-).

Soll heißen eigentlich möchte ich immer den Rückgabewert abfangen, aber ich habs bestimmt mal irgendwo vergessen, da auch ich fast nie Backticks verwende. Eigentlich verwende ich am liebsten die entsprechende Perllösung (die oft auch noch besser ist (wie etwa File::Copy <-> `cp ...`)). Oder gelegentlich mal system in sehr kleinen Shellskript-Ersatz-Skripten.\n\n

<!--EDIT|Crian|1086827026-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Relais
 2007-03-21 16:50
#83179 #83179
User since
2003-08-06
2257 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hmm, bei alten Umfragen gibt es kein Bier =(
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
bloonix
 2007-03-21 17:26
#83180 #83180
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
immer
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Linuxer
 2007-03-21 19:15
#83181 #83181
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
>> "Fragst Du Fehler ab, wenn Du Backticks einsetzt?"

Gelegentlich. Wenn ich sie (gelegentlich) einsetze, brauch ich eigentlich das, was das Kommando auf STDOUT ausgibt; die Rückgabe wird kontrolliert; der eigentliche Exitcode nicht.

Also gelegentliche Fehler-Abfrage bei gelegentlicher Nutzung der Backticks. Wie häufig ist das dann?

[edit] Beitrag umeditiert; Unklarheiten meinerseits beseitigt [/edit]\n\n

<!--EDIT|Linuxer|1174502762-->
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!
renee
 2007-03-21 20:56
#83182 #83182
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welcher Archäologe hat sich denn hier zu Perl-Community.de verirrt. Der Thread ist ja schon uralt :p
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
docsnyder
 2007-03-22 12:11
#83183 #83183
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich schliesse mich Linuxer an.

Gruss, Doc
betterworld
 2007-03-26 18:04
#83184 #83184
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=renee,21.03.2007, 19:56]Welcher Archäologe hat sich denn hier zu Perl-Community.de verirrt. Der Thread ist ja schon uralt :p[/quote]
Offenbar habe ich auch schon abgestimmt, obwohl ich mich nicht mehr an die Umfrage erinnern kann :)

Aber zum Thema: Backticks sind wirklich grausam.  Was sie nicht haben, ist eine Mehrere-Argumente-Form wie bei system("program", @args).  Daher muss man immer alles Quoten.  Aus diesem Grunde bevorzuge ich open.  Wer nicht jedes Mal den ganzen Kram schreiben will, kann so eine Subroutine verwenden:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub SafeBackticks {
       my ($cmd, @args) = @_;
       open (my $pipe, '-|', $cmd, @args)
               or die "Could not run $cmd @args: $!\n";

       my $output = do {local $/; <$pipe>};
       defined ($output) or die "read: $!";

       unless ( close($pipe) ) {
               my $error = ($? & 0x7f)
                       ? 'Signal ' . ($? & 0x7f)
                       : 'Exit status ' . ($? >> 8);

               die "$error: $cmd @args";
       }
       return $output;
}

Zum Aufruf dieser Sub muss ich wohl nichts sagen, das ist mehr oder weniger intuitiv.  Zurueckgegeben wird die Ausgabe des Programms (als String, ungesplittet).  Im Fehlerfall wird eine Exception generiert, die man nach Belieben mit eval{} abfangen kann.\n\n

<!--EDIT|betterworld|1174917916-->
ptk
 2007-03-30 01:20
#83185 #83185
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Oder man verwendet gleich CPAN:IPC::Run. Damit kann man auch noch recht komfortabel STDIN einbinden und STDOUT und STDERR getrennt herausholen, und auch Pipes statt nur einfacher Kommandos verwenden. Und und und
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2004-06-08 02:26.