如何在控制台上运行Perl脚本与Windows计划任务相比?

时间:2016-04-10 16:10:23

标签: windows perl scheduled-tasks strawberry-perl

我正在使用Strawberry Perl v5.22。我希望能够确定何时手动在控制台中运行脚本和作为计划任务,以便改变行为(例如,将日志级别更改为更详细并输出到STDERR)。

我试过IO::Interactive但似乎总是说脚本是以交互模式运行的。我认为因为Windows 始终在新控制台中运行脚本,即使任务以SYSTEM用户身份运行。

我不能依赖以SYSTEM用户身份运行的脚本,因为在一些奇怪的情况下,脚本需要以管理员身份运行。

1 个答案:

答案 0 :(得分:1)

普通交互式控制台下定义了 PROMPT 环境变量,而在从 Windows 资源管理器(双击)启动 .PL 时则没有。

我不知道这在 Windows 调度程序下的行为是否与直接使用 Windows 资源管理器时的行为相同,但您可以试试这个(它可以区分交互式控制台和在 W7 和 W10 下从 Windows 资源管理器双击,至少是专业版):

BEGIN {
    $^O =~ /MSWin/ or die "This programme must be run under Windows.\n";
};

use strict;
use warnings;
use 5.016;

if ($ENV{PROMPT}) {
    print "This programme was started from an interactive console.";
}
else {
    say "This programme was started directly from Windows Explorer.";
    print 'Press <return>...'; <>;
};

我怀疑它甚至可能在 Unix 下使用:它似乎记得,在过去,在 cron 下使用 Korn shell 时,提示没有在 OSF1 作业中定义(True64 Unix)来自数字。

注意:如果这不起作用,您可以尝试将 Perl 作业封装在 .CMD 批处理文件中并测试 %CMDCMDLINE% 和 %COMSPEC% 之间的差异,这是检查批处理文件是否运行的常用方法是否来自控制台。 但这超出了您的问题范围。