代码之家  ›  专栏  ›  技术社区  ›  Brian Rasmussen

Windows上的Perl、文件关联和I/O重定向

  •  6
  • Brian Rasmussen  · 技术社区  · 16 年前

    有人能解释一下通过文件关联调用Perl脚本与通过 perl.exe ?

    显然,当通过文件关联调用脚本时,I/O重定向不能很好地工作,我很想知道为什么。

    例如,看看 Activestate FAQ for Perl on Windows . 这个 cat file 只要脚本不通过重定向接收其输入,示例就可以完美地工作。所以

    cat file.txt
    

    按预期工作,但

    whoami | cat.pl
    

    没有。不仅是 .pl 需要扩展,但显然 whoami 没有导入到脚本中。运行脚本(可通过修改示例进行验证 cat.pl 脚本),但由于某种原因,它不接收 呼玛 作为输入。

    但是,如果我这样调用脚本:

    whoami | perl cat.pl
    

    一切正常。

    显然,通过文件关联运行脚本和显式调用 佩里埃 用脚本。

    常见问题解答提到了这个问题,并指出使用 pl2bat 为脚本生成一个BAT文件封面可以解决这个问题,但我不明白为什么需要这样做。

    请启发我。

    2 回复  |  直到 9 年前
        1
  •  9
  •   Callie J    9 年前

    它看起来像是Windows 2000中的一个已知错误: STDIN/STDOUT Redirection May Not Work If Started from a File Association .

    我在WinXP上使用草莓Perl获得了与您描述的相同的行为,但是,当我创建了上面文章中描述的注册表项(即使注册表项的目标是Win2K)之后, stdin 按预期工作。

    为了完整性,如果上面的链接消失,它建议创建的注册表项是:

    1. 启动注册表编辑器。
    2. 找到并单击注册表中的以下项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
    3. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:
      • 值名称: InheritConsoleHandles
      • 数据类型: REG_DWORD
      • 雷迪克斯: Decimal
      • 价值数据: 1
    4. 退出注册表编辑器。

    编辑: 我应该补充一点,即使知识库文章声称它是在xp sp1中修复的,但我已经安装了xp sp3。所以,我不能说,不管微软是把它弄坏了,还是从来没有完全修好!

        2
  •  0
  •   Community Mohan Dere    9 年前

    我知道这是一个旧线程,但需要注意的是,微软似乎已经在Windows10中颠倒了这个设置的极性。不知道他们为什么要这样做,但这让我花了一天时间把头发拔出来。查看我的另一个已发布问题( Perl Scripts on Windows 10 run from Explorer but not Command Prompt ,尤其是那里的链接的msdn帖子。

    推荐文章