Schrift
[thread]6165[/thread]

STDERROR & STDOUTPU: Wie abfangen mit SYSTEM?



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Patrick
 2004-03-26 15:42
#81271 #81271
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte mit SYSTEM ein Programm aufrufen, was ja auch funktioniert.
Nun soll aber die STDERROR und STDOUTPUT in einer Datei gespeichert werden.
Da Perl ja mit SYSTEM eine eigene shell aufmacht weis ich nun nicht wie ich diese Meldungen abfangen kann.

hier ein Beispielaufruf wie bislang gedacht:

system (Pfad/Programm &> Datei.txt &);

vielen lieben Dank
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
ptk
 2004-03-26 15:51
#81272 #81272
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
system q(Pfad/Programm >& Datei.txt 2>&1 &);
Patrick
 2004-04-08 11:17
#81273 #81273
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
# usr/bin/perl -w

my $datei = "Datei.txt";
my $com;

# Das funktioniert
#system q(/usr/bin/mozilla >& Datei.txt 2>&1 &);

# Das jedoch nicht!
$com = '"/usr/bin/mozilla" , ">&" , "' . $datei . '" , "2>&1" , "&"';
system q("$com")

#system q('"/usr/bin/mozilla" , ">&" , "' Datei.txt '" , "2>&1" , "&"');



Wie kriege ich folgenden Aufruf ausgeführt?

"/usr/bin/mozilla" , ">&" , "' Datei.txt '" , "2>&1" , "&"

welchen effekt hätte denn das Setzen der " und , ?

Was ist der Unterschied zwischen

/usr/bin/mozilla >& Datei.txt 2>&1 &

und

"/usr/bin/mozilla" , ">&" , "' Datei.txt '" , "2>&1" , "&"

??

Danke
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
ptk
 2004-04-08 13:07
#81274 #81274
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Durch Verwenden der Listenform von system() gibt du den Aufruf direkt an exec() des Betriebssystems weiter, ohne dass die Zeile nochmals auf Shell-Metazeichen geparst wird. Bei der Stringform werden alle Vorkommen von *, ", <, >, & etc. durch /bin/sh geparst und behandelt.

Wenn du die Listenform brauchst und trotzdem komfortabel Umleitungen etc. machen willst, solltest du dir IPC::Run angucken (erhaeltlich auf dem CPAN).
Patrick
 2004-04-08 15:30
#81275 #81275
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
ich verstehe aber trotzdem nicht wieso es nicht klappt.

Ich bin leider auch nicht besonders Fit in Perl, da tu ich mir mit den ERklärungen wie Deine z.B.
leider schwer.

kannst Du mir kurz und für "Begriffsstutzige" erklären was die " und , bewirken.
Ich habe was vonwegen Sicherheit gehört!
Kommt das in etwa hin?

Wi müsste ein Befehl geschrieben werden um die " und , zu verwenden?

Code: (dl )
system q('"/usr/X11R6/bin/mozilla",">&","Datei.text","2>&1","&"');


Ergebnis
sh: line 1: "/usr/X11R6/bin/mozilla",">&","psi.fasta","2>&1","&a
mp;": No such file or directory
Das klappt ja nicht! Wieso, was muss geändert werden?

Vielen lieben Dank\n\n

<!--EDIT|Patrick|1081423958-->
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
pq
 2004-04-08 16:04
#81276 #81276
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
# entweder listenform:
system ('command', 'arg1', 'arg2', ...);
# oder
system('command arg1 arg2 ...');

wenn du redirects wie 2>&1 verwendest, musst du die zweite
form nehmen, denn bei der ersten form wird keine shell gestartet,
aber für so einen redirect brauchst du halt die shell.
hoffe, das war jetzt verständlich =)
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
Patrick
 2004-04-13 11:40
#81277 #81277
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Ahh... Danke!

Ich habe es nun so versucht
Code: (dl )
 system ('/usr/bin/mozilla Fehler_test.txt 2>&1'); 

klappte aber nicht richtig. Sprich die Meldungen werden nicht in die Datei geschrieben!
Es wird auch keine Datei erstellt!
Wenn ich aber folgendes mache
Code: (dl )
 system ('/usr/bin/mozilla >& Fehler_test.txt 2>&1'); 

klappt es!

Warum?

Gibt es einen Unterschied zwischen
system q(/usr/bin/mozilla Fehler_test.txt 2>&1);
und
system ('/usr/bin/mozilla Fehler_test.txt 2>&1');
bzw.
system ("/usr/bin/mozilla" , "Fehler_test.txt" , "2>&1");

??
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
renee
 2004-04-13 11:47
#81278 #81278
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, durch das >& gibst Du an, dass der Output in eine Datei umgeleitet werden soll. Ohne das >& gibst Du an, welche Datei mozilla öffnen soll.
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/
pfuschi
 2004-04-13 12:41
#81279 #81279
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
am Rande noch etwas.
Um das Erebniss von z.B. shell commandos im Programm zu haben kann man einfach die Backticks benutzen.
Code (perl): (dl )
1
2
$string = `dir`;
print $string;

Allerdings hab ich keine Ahnugn ob das irgendwelche "besonderen" Sicherheitsrisiken oder Performance Nachteile mit sich bringt.

Hope could help
greetz & fetten Segen
manu
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
Patrick
 2004-04-14 15:11
#81280 #81280
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Vielen Dank nochmal für Eure Hilfe.

gibt es eigentlich eine Alternative zu system, mit der ich folgende
Bedingungen gewährleisten kann?

- Ausführen eines Programms mit Übergabe eines Arguments
- Umleiten der STDERROR und STDOUTPUT in eine Datei, die ich angebe
- Quoten des Befehls (Bsp.: "Befehl" , "Argument" , ">" , "Fehler.txt" , "2>&1")
- Befehl, Argument und Fehler.txt müssen in einer Variable gespeichert werden können (fürfte mit Perl nicht das Problem sein)

Mit system klappt es ja wie folgt nicht:
Code: (dl )
system ("$com" , "$arg" , ">" , "$output" , "2>&1");


Da muss ich ja wie folgt vorgehen:
Code: (dl )
system ("$com $arg > $output 2>&1");


Ich möchte aber gerne die " und ,
Geht das?

Danke im Voraus
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-03-26 15:42.