我有一个抓住标准输入的脚本:
&process_input
sub process_input {
while(<STDIN>) {
$log_data .= $_;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时:
myscript.pl -param1=a -param2=b
Run Code Online (Sandbox Code Playgroud)
我陷入了这个子程序.如果我这样做,一切都运行正常:
echo "" | myscript.pl -param1=a -param2=b
Run Code Online (Sandbox Code Playgroud)
问题是我如何确定我是否有标准品?我原本以为while()会返回false并且不会运行,但我猜它实际上正等着你输入一些东西,因为它被"卡住"了.
Mva*_*est 18
你想要做的是检查STDIN(STanDard INput)的来源:另一个应用程序或终端.在您的情况下,它是第二个选项,导致读取操作停止进程,直到用户输入内容.有关解决方案,请参阅如何判断STDIN是否连接到Perl中的终端?.
if (-t STDIN) {
# input attached to terminal and will probably ask user
} else {
# input from other process
}
Run Code Online (Sandbox Code Playgroud)
还有IO :: Interactive可以做更好/更可靠的检查.
归档时间: |
|
查看次数: |
6174 次 |
最近记录: |