2016-06-06 4 views

Antwort

-2

ändern System ($ cmd)> \ Pfad_zu \ logdir \ DATEI.log zu System (cmd $> \ Pfad_zu \ logdir \ Ich verliere DATEI.log)

+0

Das gleiche Ergebnis. Das Programm stirbt – nelli

+0

Was ist das $ cmd? – crustycollins

+0

Programmname und Argumente – nelli

-2

oops.
ändern

system($cmd > \path_to\logdir\file.log) 


zu

system($cmd "> \path_to\logdir\file.log") 
+0

Inside $ cmd ist die Ausführungsdatei cmd.exe. Jetzt habe ich eine Nachricht "Kann nicht spawn" cmd.exe ": Keine solche Datei oder Verzeichnis bei G: \ INVACCT \ Perl \ scripts \ pfi_menu.pl Zeile 295, Zeile 12. – nelli

+0

Ich empfehle die Backslashes zu entkommen und richtig zu verwenden Perl-Syntax zum Verketten von Strings. ** Entweder ** "system ($ cmd."> \\ path_to \\ logdir \\ file.log ")" ** oder ** 'system (" $ cmd> \\ pfad_zu \\ logdir \\ Datei.log ")'. – PerlDuck

+0

System ("$ cmd> \ pfad_zu \ logverzeichnis \ file.log"). So funktioniert es – nelli

0

Es gibt einige Probleme in Ihrem Skript:

  • Wenn Sie

    hinzugefügt hatte

    an Ihr Skript würde es Sie haben die folgenden Fehler gezeigt mit Ihrem ersten Versuch:

    Useless use of numeric gt (>) in void context at ./foo line 9. 
    Bareword "logfile" not allowed while "strict subs" in use at ./foo line 9. 
    Bareword "txt" not allowed while "strict subs" in use at ./foo line 9. 
    Execution of ./foo aborted due to compilation errors. 
    
  • Sie benötigen die $cmd und die Log-Datei den Namen in eine Zeichenfolge zu verbinden und diese Zeichenfolge als Parameter an system() geben.
  • Sie müssen den Backslashes entkommen, weil z. \f bedeutet Form Feed und \l bedeutet Kleinbuchstaben nächsten Zeichen.
  • Wenn Sie Fehlermeldungen umleiten möchten, möchten Sie normalerweise STDOUT und STDERR in eine Datei umleiten.

Fassen wir zusammen:

use strict; 
use warnings; 

my $logfile = "\\path_to\\logdir\\file.log"; 
my $rc = system("$cmd > $logfile 2>&1"); 
if (!$rc) { 
    warn "something went wrong\n"; 
} 

Diese Umleitungen Fehler- und Standardausgaben in derselben Datei.


Meine Antwort bezieht sich auf this revision der Frage. In der Zwischenzeit hat jemand das Q bearbeitet, doppelte Backslashes \\ hinzugefügt und somit das dritte Geschoss ungültig gemacht.

Verwandte Themen