PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [cgi] Shellcommando ausgabe umleiten



alex23
25-08-2006, 12:07
Hallo ich hab hier ein kleines problem dessen lösung ich nicht allein finde.

also folgendes:

ich will mit einen cgi-script ein shellcommando ausführen und dessen ausgabe in einer variable speichern oder besser noch in eine datei umlenken.


$A = `rsh`;
`echo $A >> c:/tmp/purge.out`;

das kommando wird ausgeführt, jedoch wird mir die ausgabe davon ins errorlog geschrieben. ich hatte das schon mal hinbekommen hab aber vergessen wie :(

wenn ich aber zB mit probiere, geht es. aber nicht mit rsh nur mit ping.

system("ping >/tmp/test");

michael.sprick
25-08-2006, 14:15
system() liefert Dir nur den Rückgabewert des Kommandos...



my $retval = system('ls /home');
print $retval;

Die Ausgabe ist 0, denn ls wurde erfolgreich ausgeführt.

Wenn Du den Output an STDOUT Deines Programmes abfangen willst, musst Du entweder Backticks benutzen oder qx//.

Achte dabei auch darauf, dass Du STDERR auf STDOUT umleitest...

mehr dazu: perldoc -f system

alex23
04-09-2006, 16:08
gut gut... nun hab ich verschiedenes aus probiert und hab das problem ein wenig eingekreist...

also folgendes:


open (DAT, '>> c:/tmp/out.txt');
$A = `netstat -n`;
print DAT $A,"\n";
close DAT;

das geht und ich bekommen meinen output in die datei.
mach ich aber $A = `rsh 192.168.0.23 -l userlogin ausführbaredatei.exe`;
oder eben test weise nur $A = `rsh`;, bekomm ich keinen output. ich kann mir das dann im error.log meines apache angucken. also schreibt rsh in stderr. oder wie seht ihr das? kann ich das dann irgendwie abfangen?
ich brauch unbedingt nen output von dem commando, also rsh was ich ausführe. ohne ausgabe klappt alles wunderbar. aber ich würde gern nachprüfen können obs geklappt hat.

mit print DAT $stderr; scheint es auch nicht zu klappen

michael.sprick
05-09-2006, 01:16
Da gibt es viele Möglichkeiten - die einfachste ist wohl, bei der Ausführung des Shell Kommandos STDERR nach STDOUT umzuleiten...



$A = `netstat -n 2>&1`;
print DAT $A,"\n";
close DAT;

alex23
05-09-2006, 11:56
danke, das hat funktioniert! :)

heute auch mal bei einen kollegen endlich das perl-kochbuch bekommen und da stand dann alles drin ^^