perl 如何将 perl 脚本的列表形式系统调用的 STDOUT 附加到文件

2024-03-07

My bosswrap.pl将生成元素中包含空格的任意数组。它通过系统调用重复发送数组wrapped.pl,它根据数组创建 STDOUT。

随后,bosswrap.pl必须附加 STDOUTwrapped.pl到一个文件bosswrap.pl控制。这就是我被困住的地方。第一的wrapped.pl:

#!/usr/bin/perl
use strict; use warnings;
print "inside $0\n";
my $countarrayelements=0;
for my $item ( @ARGV ) {
        $countarrayelements++;
        print "$countarrayelements: |$item|\n"; 
    }

Then bosswrap.pl:

#!/usr/bin/perl
use strict; use warnings; 
my $fileresult = "trash.txt";
unlink $fileresult; # rm any existing file
my $handlefileresult; 
my @array = ( 5, "don't you . . . ", "\x09\x21", "\x3f  \x21" );
my $count=0;
print "inside $0\n";
for my $element ( @array ) {
    $count++;
    print "$count\t|$element|\n";
}

#https://stackoverflow.com/questions/50553031/calling-a-shell-command-with-multiple-arguments
#list form: command line arguments pass verbatim, avoid shell interpolation  
system("wrapped.pl", @array) == 0 or die "system failed: \$? = $?";

#This block sends the return code, not the STDOUT, to handlefileresult
open( $handlefileresult, ">> ", $fileresult) || die "$0: can't open $fileresult for appending$!";
print $handlefileresult "not a system call\n";
print {$handlefileresult} system("wrapped.pl", @array) == 0 or die "system failed: \$? = $?";
close ( $handlefileresult ) || die;

#In the following block, select unfortunately will not redirect output of system call:
open( $handlefileresult, ">> ", $fileresult) || die "$0: can't open $fileresult for appending$!";
select $handlefileresult; 
print "selected; BEFORE system call\n";
system("wrapped.pl", @array) == 0 or die "system failed: \$? = $?";
print "selected; AFTER system call\n";
close ( $handlefileresult ) || die;

再次,我想反复打电话wrapped.pl从内部bosswrap.pl并将这些系统调用的输出放入$fileresult.

建议回复 @ikegamiuse IPC::Run qw( run );但这会引发错误。我在 Macos 上运行 Perl。必须做什么才能使其发挥作用?

> perl --version

This is perl 5, version 18, subversion 4 (v5.18.4) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

Copyright 1987-2013, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

> bosswrap.pl
Can't locate IPC/Run.pm in @INC (you may need to install the IPC::Run module) (@INC contains: /sw/lib/perl5/darwin-thread-multi-2level /sw/lib/perl5 /sw/lib/perl5/darwin /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.4 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /Users/BNW/u/kh/bin/bosswrap.pl line 3.
BEGIN failed--compilation aborted at /Users/BNW/u/kh/bin/bosswrap.pl line 3.
> 

基于安装缺少的 Perl 模块的最简单方法是什么? https://stackoverflow.com/questions/65865/whats-the-easiest-way-to-install-a-missing-perl-module I did

> cpan IPC::Run
<snip>
Appending installation info to /Users/BNW/perl5/lib/perl5/darwin-thread-multi-2level/perllocal.pod
  TODDR/IPC-Run-20180523.0.tar.gz
  /usr/bin/make install  -- OK 

然后重新启动这台MacBook Pro 10.14.6。但我显然得到了同样的错误:

> bosswrap.pl
Can't locate IPC/Run.pm in @INC (you may need to install the IPC::Run module) (@INC contains: /sw/lib/perl5/darwin-thread-multi-2level /sw/lib/perl5 /sw/lib/perl5/darwin /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.4 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /Users/BNW/u/kh/bin/bosswrap.pl line 3.
BEGIN failed--compilation aborted at /Users/BNW/u/kh/bin/bosswrap.pl line 3.
> 

我怎样才能解决这个问题?


STDOUT和 Perl 的默认输出句柄(使用select)是操作系统一无所知的特定于进程的变量。执行的程序不会继承这些。它确实继承了父级的文件描述符,即底层系统句柄。

我会让IPC::Run http://search.cpan.org/perldoc?IPC::Run or IPC::运行3 http://search.cpan.org/perldoc?IPC::Run3为我做艰苦的工作。

use IPC::Run qw( run );

run [ "wrapped.pl", @array ],
   '>>', $fileresult;

die("wrapped.pl killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("wrapped.pl exited with error ".( $? >> 8 )."\n") if $ ?>> 8;

也可以使用低级核心模块来完成IPC::Open3 http://search.cpan.org/perldoc?IPC::Open3

use IPC::Open3 qw( open3 );

open(local *CHILD_STDIN, '<', '/dev/null')
   or die("Can't open \"/dev/null\": $!\n");
open(local *CHILD_STDOUT, '>>', $fileresult)
   or die("Can't append to \"$fileresult\": $!\n");

my $pid = open3('<&CHILD_STDIN', '>&CHILD_STDOUT', '>&STDERR',
   "wrapped.pl", @array);

waitpid($pid, 0);
die("Can't execute wrapped.pl: $!\n") if $? == -1;
die("wrapped.pl killed by signal ".( $? & 0x7F )."\n") if $? & 0x7F;
die("wrapped.pl exited with error ".( $? >> 8 )."\n") if $ ?>> 8;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perl 如何将 perl 脚本的列表形式系统调用的 STDOUT 附加到文件 的相关文章

  • 验证项目是否在开始日期和结束日期内

    我有一个java程序 它将检查每个项目的开始日期和结束日期 每个项目必须有自己特定的开始日期和结束日期范围 如果新的开始日期和结束日期的范围落在旧的开始日期和结束日期内 系统将提示错误消息 例如 Company ABC Item Numbe
  • 如何在 Yii2 应用程序中显示多个选择下拉列表中的选定值?

    我正在研究 Yii2 我正在使用这样的自定义数组创建多个选择下拉菜单 在控制器文件中 all groups Groups find gt where group created by id gt orwhere new Expression
  • Objects.deepToString(Object o) 方法

    班上java util Objects包含deepEquals Object a Object b 可用于比较任何类型的对象 包括数组和空引用 的方法 但不包含类似的方法deepToString Object o 这令人失望 顺便说一下 这
  • C 中的数组地址减法[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的指针算术 https stackoverflow com questions 759663 pointer arithmetic in c Code int main int a 0 1 2
  • Mac OSX 10.7.4,Xcode 4.4.1,没有 头文件?

    我正在编写一个程序 它将使用 C 标准库的数组容器来保存一些对象 但是 每当我尝试在程序中包含以下代码行时 include
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • PHP 使用主键和辅助键对多维数组进行排序[重复]

    这个问题在这里已经有答案了 如何按主键和辅助键对多维数组进行排序 例如 假设有以下数组 result array result 0 prio 1 result 0 date 2010 02 28 result 0 post February
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • << 和 += 有什么区别?

    我一直在尝试使用数组 发现自己在理解以下代码时遇到了困难 first array second array third array I initialized 3 empty arrays third array lt lt 1 2 3 4
  • 无法从 XML 获取数组字符串资源

    我的 XML 文件中有一个值列表 我想根据微调器选择来选择这些值 由于某种原因 使用数组字符串作为微调器可以正常工作 这些值将填充到微调器中 无论出于何种原因 我无法获取第二个数组的值来挽救我的生命 它们位于同一个文件中 没有我能找到的错误
  • 如何加速我的 Perl 程序?

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Perl 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Perl从头开始编写程序时 有哪些好的方法
  • 如何匹配单引号字符串中的双反斜杠?

    我需要区分带有单反斜杠和双反斜杠的字符串 Perl 对它们一视同仁 print n qqq www eee rrr print n qqq www eee rrr 将给出相同的结果 qqq www eee rrr qqq www eee r
  • Javascript 无法正确排序 DECIMAL 数字

    我有一些代码可以按字母顺序对名称进行排序 我遇到的问题是它处理小数的方式 它对名称进行排序 如下所示 我宁愿它按数字递增 DOG 1 0510 DOG 1 1031 DOG 11 1792 DOG 12 0920 DOG 12 1170 D
  • 基于数组对列表进行排序

    我正在尝试根据字符串数组对自定义列表进行排序 但我失败得很惨 例如它根本没有对列表进行排序 Public class CrateOrder public int Id get set public string Name get set p
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • 在 Node.js 中创建 JSON 数组

    我需要在用 Node js 编写的服务器中创建一个 JSON 字符串 以便在请求时发送到客户端 问题是这个 JSON 取决于服务器中的可用数据 因此 JSON 数组的大小并不总是相同 我已经尝试了一整天 但尽管我感觉很接近 但我仍然不明白
  • Numpy:生成二维高斯 pdf 总和作为数组

    我正在尝试生成一个 600 x 600 numpy 数组 其中包含 10 个类似高斯数组的总和 每个数组都有一个随机生成的中心 我尝试使用高斯滤波器来生成各个类似高斯的数组 然后将它们相加 但我确信有一种矢量化的方法可以解决这个问题 即使n
  • 如何过滤掉数组的数组

    您好 我有一个包含多个值的数组 我想尝试过滤掉搜索栏的索引 英语术语的一个例子是这样的 给我名称 Name2 的索引 并通过检查每个索引的第一个值中的所有字符串来执行此操作 Code Multiple Errors var received
  • 如何获取数组中最后 5 个元素(不包括第一个元素)?

    在 JavaScript 数组中 如何获取最后 5 个元素 排除第一个元素 1 55 77 88 would return 55 77 88 添加其他示例 1 55 77 88 99 22 33 44 would return 88 99
  • 是否有与 pdl2(或 Devel::REPL)中的 perl 调试器“x”等效的东西?

    我在用pdl2 the PDL http p3rl org PDLshell 也作为我的默认 Perl 交互式 shell 它加载所有不错的插件Devel REPL http search cpan org perldoc Devel 3a

随机推荐

  • 如何使用 DispatchGroup 在 for 循环内进行异步调用

    在下面的示例代码中 我调用complete false 失败时 但是 由于我使用的是DispatchGroup对象来确保所有异步请求都完成 我不能只调用syncGroup leave 失败时 作为notify将被调用 其中包含complet
  • WooCommerce:获取并设置送货和帐单地址的邮政编码

    如何在 woocommerce 中设置 获取邮政编码 Zip code 有这个功能吗 即 我可以通过任何函数设置邮政编码吗 我还想知道 如果用户未登录 如何用我的数据 例如 546621 填充此字段 您可以执行以下操作来获取 设置帐单 运输
  • 带光标的可扩展列表视图

    我想制作一个可扩展的列表视图 但适配器将光标作为输入而不是数组列表 我想在崩溃时实现动画 https github com idunnololz AnimatedExpandableListView https github com idu
  • 是否可以禁用 cdkDrag 子元素上的拖动?

    我正在使用 Angular Material 中的 Angular CDK 拖放 请参阅文档here https material angular io cdk drag drop overview 我想知道是否有可能禁用在子元素上拖动cd
  • Django Rest框架-无法序列化查询集

    我尝试序列化查询集 def do self reservations Reservation objects all serializer ReservationSerializer data reservations many True
  • golang 类型映射的匿名字段

    我想我可以通过使用匿名字段来创建有序的地图类型 type customMap struct map string string ordered string 我可以在哪里参考地图customMapInstance key 并迭代ordere
  • Docker-swarm >> 无法连接到 docker 引擎端点

    docker version 1 9 1 swarm version 1 0 1 为什么要将 3 个虚拟机 桥接网络 连接到 swarm docker info 显示所有节点 状态待定 3 个主机中的 1 个是manager所有输出均来自该
  • 确定 JavaScript 属性是否定义了 getter 或 setter?

    给定一个对象和属性名称 是否可以确定该属性是使用 getter 还是 setter 定义的 还是完全透明的 如果属性上尚未定义 getter setter 我只想定义一个 getter setter 我需要它在 WebKit Firefox
  • Git init --bare - 不在工作树上工作

    我正在按照这里的例子http wiki dreamhost com Git http wiki dreamhost com Git 基本上我想创建一个 git 存储库 我可以从桌面推送到服务器上 在主机上 host mkdir projec
  • UILocalNotification:播放保存在文档目录中的自定义音频文件

    目前我正在创建一个警报应用程序 它可以从服务器播放自定义音频剪辑 我的实现计划是在本地保存所有音频剪辑 然后相应地设置 soundName 但我有一些问题 目前 我在将音频文件保存在捆绑目录中时遇到问题 只能将文件保存在文档目录中 是否可以
  • 相当于ORACLE在mysql中的并行查询

    mysql中有没有与ORACLE相同的并行查询的等效方法 甲骨文之道 select FULL emp PARALLEL emp 35 emp name from emp 在mysql中 完整 emp 并行 emp 35 将被视为评论 MyS
  • 在 Java 中嵌入 XQuery

    我需要从 Java 中的 MusicXML xml 文件中检索一些详细信息 我设法用java读取xml文件 但通过网络服务 当我运行代码时我必须在线 连接到互联网 我遇到了 XQuery 您可以轻松地从 XML 文件中提取信息 但我需要在j
  • GNU 制定通配符替代方案吗?

    我想选择目录中的所有文件 但使用 FreeBSD 的 make 在 GNU 中 使这种方法有效 FILES wildcard c 我使用的是 FreeBSD 的 make 而不是 GNU make 所以我正在寻找可以在 FreeBSD 的
  • 从 DOM 中删除同级元素时创建块元素的平滑过渡

    我有一个容器 其工作方式类似于 mac os 中的通知 元素被添加到队列中 并在一定的超时后被删除 这很有效 但有一个不和谐的视觉副作用 当它们从 DOM 中删除时 UI 会出现锯齿状更新 因为堆栈中的下一个元素会填充前一个元素创建的空白
  • Web API Swagger 文档导出为 PDF

    根据文档 http swagger io open source integrations http swagger io open source integrations 有插件Java to 将 Swagger 文档导出为 PDF 我只
  • 如何在组件中查找元素?

    我想知道如何使用以下命令找到组件内的元素Renderer 在 angular1 中我会去 link scope element attributes gt var outsideBox element find outside box 这返
  • 简单文件复制的正确 Java 配置是什么

    我对 Spring 非常陌生 对 Spring Integration 更陌生 所以如果这是一个非常基本的问题 我深表歉意 我想构建一个非常基本的日志文件处理器来学习诀窍 与此非常相似 example http forum spring i
  • Python:用于从各种格式加载音频元数据的功能最丰富的库是什么?

    我正在寻找一个功能丰富的优秀库 用于从各种音频格式 MP3 FLAC OGG WAV 等 读取元数据 我已经看过 Mutagen 但文档几乎不存在 而且它似乎无法加载基本信息 例如艺术家和音频标题 艺术家和音频标题编码是否正确 它无法满足哪
  • AppCode 工作区和 TFS 命令行客户端工具

    我可以使用 AppCode 创建一个工作区 并成功签入和签出 TFS 这一切都很好 但是当我使用TFS 的跨平台命令行客户端 http msdn microsoft com en us library gg413282 28v vs 100
  • perl 如何将 perl 脚本的列表形式系统调用的 STDOUT 附加到文件

    My bosswrap pl将生成元素中包含空格的任意数组 它通过系统调用重复发送数组wrapped pl 它根据数组创建 STDOUT 随后 bosswrap pl必须附加 STDOUTwrapped pl到一个文件bosswrap pl