加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

与perl 5.10.1一样,IPC :: Open3 :: open3()不能与perl 5.14.2一

发布时间:2020-12-15 23:23:56 所属栏目:大数据 来源:网络整理
导读:在我们的一个模块中,我们检查给定的二进制文件(varnishd)是否存在,如果存在,我们运行其他测试. 为了执行检查,我们使用IPC :: Open3,就像这样(为清晰起见,为了清楚起见,示例为了简化): perl -MIPC::Open3 -le ' my $binary = "varnishd"; my $pid = IPC::Ope
在我们的一个模块中,我们检查给定的二进制文件(varnishd)是否存在,如果存在,我们运行其他测试.

为了执行检查,我们使用IPC :: Open3,就像这样(为清晰起见,为了清楚起见,示例为了简化):

perl -MIPC::Open3 -le '
    my $binary = "varnishd";
    my $pid = IPC::Open3::open3(my($in,$out),undef,$binary,"-V");
    waitpid $pid,0; print $?'

在Debian Squeeze或Ubuntu Natty下,使用perl 5.10.1,如果在系统上找不到varnishd,这将为我打印65280.
如果将$binary更改为perl,则(正确)打印0.

但是,使用Ubuntu Precise和perl 5.14.2,这不再以相同的方式工作,并产生以下内容:

$perl -MIPC::Open3 -le '
    my $binary = "varnishd";
    my $pid = IPC::Open3::open3(my($in,0; print $?'
open3: exec of varnishd -V failed at -e line1

当我将$binary更改为存在的东西时,例如perl,然后它正常工作并打印0.

$perl -MIPC::Open3 -le '
    my $binary = "perl";
    my $pid = IPC::Open3::open3(my($in,0; print $?'
0

阅读其他问题和答案,看起来我想看看IPC::Run,但我想实际上:

>了解这种行为差异
>如果可能,请避免任何依赖性

编辑:忘了提到这个东西是在chroot环境下运行的,Squeeze和Precise系统,如果那都是相关的(例如/ dev文件系统差异?).

解决方法

您注意到 bug fix.

在你所谓的5.10.1版本中,open3报告程序运行并退出代码为255.这些都不是真的.

在你所谓的5.14.2版本中,open3抛出一个异常,因为它总是被记录下来,并且它总是为其他一些问题做了.如果需要,你可能会发现使用eval BLOCK启动孩子的失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读