2016-07-08 10 views
-1

läuft Ich versuche, einen Text in einer Datei mit dem folgenden Code zu drucken: test.plDrucke in Datei Perl-Code verwenden, aber es durch cmd

#!/usr/bin/perl 
use strict; 
use warnings; 

my $file="testing.txt"; 

open(INP_FILE,'>>',$file); 
    print INP_FILE "Test\n"; 
close(INP_FILE); 
print "Text is Printed\n"; 

Während es durch Cygwin läuft, ich bin in der Lage zu drucke es in Datei. Aber wenn Sie dieselbe Datei über cmd mit dem Befehl unten ausführen, wird "Gedruckt" auf der Konsole gedruckt, aber die Datei wird nicht mit "Test" -Text geschrieben.

Grundsätzlich teste ich nur die Funktionalität, später werde ich Systembefehl ausführen, um Backup von meiner Datenbank zu nehmen. Und ich versuche, diesen Cmd-Task-Scheduler auszuführen, um automatisches Backup zu machen.

In Windows-Taskplaner, öffne ich cmd.exe und gebe das Argument als /c C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl

dieser Befehl wird das Fenster schließt, nachdem das Skript ausgeführt wird, und ich bin nicht in der Lage die Ausgabe von cmd Konsole zu überprüfen, aber das Drucken der Datei in der Cygwin-Konsole.

Lassen Sie mich wissen, ob es eine andere Methode ist es, den Prozess der Ausführung des Perl-Skript durch Task-Scheduler

+1

'perldoc -f open'' offen ... oder sterben $ !; ' – toolic

+1

Ich sehe, Sie haben sich * JustStarted * genannt, vermutlich als vorbeugende Verteidigung gegen Kritik. Aber du brauchst einen * viel * mehr Whitespace in deinem Code, da es anderen hilft, die du um Hilfe gebeten hast, um zu lesen, was du geschrieben hast, und es wird dir morgen auch klarer sein, wenn du demselben Bildschirm voller Charaktere gegenüberstehst nochmal! 'T' ist kein guter Name für irgendetwas außer vielleicht eine Zeitvariable, und' $ i' ist im Allgemeinen ein Array-Index, aber sicherlich kein Dateiname. Lustig, dass der Text, den Sie * print * drucken, richtig Englisch ist, wie 'Test' und' Printed'! Sie sollten Ihr Programm gleich gut lesbar machen. – Borodin

+1

Oh, und ich denke, du solltest deinen Namen in etwas Realistisches ändern, wie 'Ziemlich verdammt gut', sonst versteckst du dich einfach und wächstst nie. – Borodin

Antwort

-2

wenn Sie die Datei dies funktionieren wird außer Kraft setzen wollen zu automatisieren:

#!/usr/bin/perl 
use strict; 
use warnings; 
my $filename = 'test.txt'; 

open my $fh, '<', $filename 
    or die "Cannot open '$filename' for appending: $!"; 

my @lines = sort grep { $_ } <$fh>; 
close $fh or die "Cannot close '$filename': $!"; 

open $fh, '>', $filename 
    or die "Cannot open '$filename' for writing $!"; 
print $fh @lines; 
close $fh or die "Cannot close '$filename': $!"; 
+0

Das scheint nicht auf die Frage des OP bezogen zu sein. Es ist auch Overkill, um den Erfolg von * jeder * IO-Operation zu testen, besonders 'close' bei Eingabe-Handles. Wenn Sie so vorsichtig sein müssen, dann ist das [Autodie] (https://metacpan.org/pod/autodie) Pragma Ihr Freund :) – Borodin

0

Sie muss immer use strict und use warnings 'all' und überprüfen Sie den Status von jedem open Aufruf. Es ist auch am besten, lexikalische Dateihandles anstelle von globalen zu verwenden. Lexikalische Dateihandles werden implizit geschlossen, wenn das Handle den Gültigkeitsbereich verlässt. So sollten Sie Ihren Code so aussehen

#!/usr/bin/perl 

use strict; 
use warnings 'all'; 

my $file = 'testing.txt'; 

{ 
    open my $fh,'>>', $file or die qq{Unable to open "$file" for appending: $!}; 
    print $fh "Test\n"; 
} 

print "Printed\n"; 

Wenn Sie laufen, statt dann werden die Nachrichten, die Sie sagen, warum es schief läuft

+0

Dank @Borodin, auch nach der Aktualisierung des Codes, nichts ist in der Datei gedruckt und ich kann nicht Siehe auch irgendeine Nachricht auf der cmd-Konsole. 'C: \ Benutzer \ TD> C: \ cygwin64 \ bin \ perl.exe C: \ cygwin64 \ home \ TD \ GMAT \ test.pl Gedruckt' Ausführen des gleichen Skripts über Cygwin-Konsole, 'Test' Text bekam in Datei gedruckt. – JustStarted