使用perl代码在文件中打印,但通过cmd

时间:2016-07-08 16:20:12

标签: windows perl cmd cygwin

我正在尝试使用以下代码在一个文件中打印文本: test.pl

#!/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";

在通过cygwin运行时,我可以将其打印在文件中。但是当使用下面的命令通过cmd运行相同的文件时,它会在控制台上打印“Printed”,但文件不会使用“Test”文本写入。

C:\Users\TD>C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl
Printed
C:\Users\TD>

基本上我只是测试功能,稍后我将运行系统命令从我的数据库中进行备份。我试图通过任务调度程序运行此cmd以进行自动备份。

在Windows任务计划程序中,我打开cmd.exe并将参数设为/c C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl

此命令在运行脚本后关闭窗口,我无法检查cmd控制台的输出,但是在cygwin控制台中打印文件。

如果有任何其他方法可以通过任务计划程序自动执行运行perl脚本的过程,请告诉我

2 个答案:

答案 0 :(得分:0)

您必须始终use strictuse warnings 'all'并检查每次open来电的状态。最好使用词法文件句柄而不是全局句柄。当句柄超出范围时,词法文件句柄将隐式关闭。所以你的代码看起来应该是这样的

#!/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";

如果你运行它,那么消息将告诉你它出错的原因

答案 1 :(得分:-2)

如果要覆盖该文件,这将起作用:

#!/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': $!";