【问题标题】:Can I use Proc::Reliable on windows?我可以在 Windows 上使用 Proc::Reliable 吗?
【发布时间】:2011-04-09 08:16:06
【问题描述】:

我在 Win 7 机器上使用 ActivePerl,我想使用 Proc::Reliable CPAN 模块。它已正确下载并安装,但是当我尝试运行以下代码时,它在run 失败了

my $newProc = Proc::Reliable->new()
$newProc->run("perl.exe -e print 'hello world'");

我尝试了几件事,例如测试status 并尝试检索输出,但没有运气。据我所知,该程序在 run 上默默地死掉了。

作为参考 perl.exe 在我的 PATH 变量中,我从命令行调用它为:perl.exe test.pl

【问题讨论】:

  • 如果您将dir 作为您的命令而不是 perl.exe,会发生什么?
  • @DVK 什么都没有。程序无输出终止
  • nm,我修好了,ysth 是对的。

标签: windows perl activeperl


【解决方案1】:

它可能没有失败。 -e print 'hello world' 告诉 perl 执行代码 print 并将 @ARGV 设置为 hello world(或者可能是 ("'hello","world'"),我忘记了 windows cmd 引用如何处理 '')。这会将 $_ 的内容(即 undef)打印到 STDOUT。

始终使用警告。即使是单线。也许尤其是在单行上。比较:

$ perl -e print 'hello world'
$

$ perl -we print 'hello world'
Use of uninitialized value $_ in print at -e line 1.
$

【讨论】:

  • 如果我认为我的程序因其他原因而失败,那么正确的测试方法是什么?我用了-e print,因为它很快,有没有其他方法?
  • @tzenes:抱歉,我实际上对 Proc::Reliable 一无所知。不过,它似乎应该提供一些有据可查的测试方法。更改内部程序以创建文件或输出调试语句以查看是否启动?
【解决方案2】:

在 Windows“shell”中引用有点不同。要将您的小程序解释为单个参数,请尝试类似

perl.exe -e "print qq/hello world/"

【讨论】:

  • 虽然这适用于 Windows“shell”,但在我的示例中不会显示任何输出,因为标准输出没有重定向到“shell”(或其他任何地方)。
  • @tzenes:如果你说 ($stdout) = $newProc->run('perl.exe -e ...'); print $stdout 会怎样?看起来进程的输出应该被Proc::Reliable 模块捕获并返回。
  • 我没有输出或打印 $stdout 失败。经过进一步调查,run 之后的任何print 都失败了。
【解决方案3】:

我已联系Proc::Reliable 模块的作者,他确认该模块无法在 Windows 上运行。

【讨论】:

    猜你喜欢
    • 2022-12-22
    • 2011-01-16
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多