【问题标题】:Print in file using perl code but running it through cmd使用 perl 代码在文件中打印,但通过 cmd 运行它
【发布时间】:2016-11-11 07:12:39
【问题描述】:

我正在尝试使用以下代码在一个文件中打印文本: 测试.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 脚本的运行过程,请告诉我

【问题讨论】:

  • 我看到您将自己命名为 JustStarted,大概是为了防止批评。但是您的代码中需要很多个空格,因为它可以帮助您请求帮助的其他人阅读您所写的内容,并且明天当您面对时也会更清楚再次出现同样的角色! T 不是一个好名字,除了可能是一个时间变量,$i 通常是一个数组索引,但肯定不是文件名。有趣的是,您打印的文本是正确的英文,例如TestPrinted!你应该让你的程序同样具有可读性。
  • 哦,我认为你应该把你的名字改成现实的名字,比如Pretty damn good,否则你只是在躲起来,永远不会成长。
  • @Borodin 感谢您的 cmets,我已更改代码以使其更具可读性。以我的名义,我仍在学习(从我的名声可以看出)这不是对批评的防御。我接受所有批评,没有任何争论。显然,随着我了解的越来越多,我会改名。并感谢建议的名称pretty damn good。哈哈..我不擅长使用这个名字的编码。 :)

标签: windows perl cmd cygwin


【解决方案1】:

您必须始终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";

如果你运行它,那么消息会告诉你为什么会出错

【讨论】:

  • 感谢@Borodin,即使在更新代码后,文件中也没有打印任何内容,并且我在 cmd 控制台上也看不到任何消息。 C:\Users\TD>C:\cygwin64\bin\perl.exe C:\cygwin64\home\TD\GMAT\test.pl Printed 通过 cygwin 控制台运行相同的脚本,“测试”文本打印在文件中。
猜你喜欢
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多