我正在使用Strawberry Perl v5.22。我希望能够确定何时手动在控制台中运行脚本和作为计划任务,以便改变行为(例如,将日志级别更改为更详细并输出到STDERR)。
我试过IO::Interactive但似乎总是说脚本是以交互模式运行的。我认为因为Windows 始终在新控制台中运行脚本,即使任务以SYSTEM用户身份运行。
我不能依赖以SYSTEM用户身份运行的脚本,因为在一些奇怪的情况下,脚本需要以管理员身份运行。
答案 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% 之间的差异,这是检查批处理文件是否运行的常用方法是否来自控制台。 但这超出了您的问题范围。