Jen*_*nni 18 windows perl stdin pipe
我试图在Perl中创建一些基本上像Unix tee
命令的东西.我正在尝试阅读每一行STDIN
,在其上运行替换,然后打印它.(最后,也将它打印到一个文件.)如果我使用控制台输入,这是有效的,但如果我尝试将输入管道输入到命令它不会做任何事情.这是一个简单的例子:
print "about to loop\n";
while(<STDIN>)
{
s/2010/2009/;
print;
}
print "done!\n";
Run Code Online (Sandbox Code Playgroud)
我尝试像这样管道dir命令:
C:\perltest>dir | mytee.pl about to loop done!
为什么没有看到管道输入?(我在WinXP上使用Perl 5.10.0,如果这是相关的.)
Sin*_*nür 25
这实际上是Windows处理IO重定向的一个错误.我现在正在寻找引用,但是这个bug需要你指定
dir | perl filter.pl
Run Code Online (Sandbox Code Playgroud)
而不是能够使用
dir | filter
Run Code Online (Sandbox Code Playgroud)
如果从文件关联启动,请参阅Microsoft知识库文章STDIN/STDOUT重定向可能不起作用:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
C:\Temp> cat filter.pl #!/usr/bin/perl while ( <> ) { print "piped: $_"; }
C:\Temp> dir | filter piped: Volume in drive C is MAIN piped: Volume Serial Number is XXXX-XXXX piped: piped: Directory of C:\Temp> piped: piped: 2010/03/19 03:48 PM . piped: 2010/03/19 03:48 PM .. piped: 2010/03/19 03:33 PM 32 m.pm piped: 2010/03/19 03:48 PM 62 filter.pl
cod*_*ict 12
尝试:
C:\perltest>dir | perl mytee.pl
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4489 次 |
最近记录: |