使用带有perlcritic的IPC :: Open3
发布时间:2020-12-15 23:20:05 所属栏目:大数据 来源:网络整理
导读:我想在子进程中压缩输出并只读取stderr. perlfaq8建议做以下事项: # To capture a program's STDERR,but discard its STDOUT:use IPC::Open3;use File::Spec;use Symbol qw(gensym);open(NULL,"",File::Spec-devnull);my $pid = open3(gensym,"NULL",*PH,"
我想在子进程中压缩输出并只读取stderr.
perlfaq8建议做以下事项:
# To capture a program's STDERR,but discard its STDOUT: use IPC::Open3; use File::Spec; use Symbol qw(gensym); open(NULL,">",File::Spec->devnull); my $pid = open3(gensym,">&NULL",*PH,"cmd"); while( <PH> ) { } waitpid($pid,0); 但随后,perlcritic在using bareword file handles辩论. 我唯一可以设计的是在STDOUT上选择新打开的描述符到/ dev / null,如下所示: # To capture a program's STDERR,but discard its STDOUT: use IPC::Open3; use File::Spec; use Symbol qw(gensym); open my $null,File::Spec->devnull; my $old_stdout = select( $null ); my $pid = open3(gensym,">&STDOUT","cmd"); select( $old_stdout ); while( <PH> ) { } waitpid($pid,0); 但是,perlcritic并不喜欢using of 解决方法
最小的改变就是通过将NULL更改为* NULL来使open中的NULL不再是一个裸字.
使用这种形式的句柄通常被认为是不好的形式(因为它们是全局变量,尽管你可以通过对它们应用local来使它们更不全局化).因此我建议将其更改为使用我的变量来处理所有句柄.它看起来像你丢弃stdin文件句柄,所以也可以传递null文件句柄(注意我在读写模式下打开它) use strict; use warnings; use IPC::Open3; use File::Spec; use Symbol qw(gensym); open(my $null,'+>',File::Spec->devnull); my $childErr = gensym; my $pid = open3($null,$null,$childErr,"cmd"); while(<$childErr>) { } waitpid($pid,0); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |