关于ipc:如何从Perl脚本中捕获系统命令的stdin和stdout?
How can I capture the stdin and stdout of system command from a Perl script?
在Perl脚本的中间,有一个我要执行的系统命令。 我有一个字符串,其中包含需要输入到stdin中的数据(该命令仅接受来自stdin的输入),并且我需要捕获写入stdout的输出。 我已经研究了Perl中执行系统命令的各种方法,并且
此刻,看来我最好的解决方案是使用 IPC :: Open2 / 3很好,但是我发现通常我真正需要的只是IPC :: Run3,它能够以最小的复杂性很好地处理简单的情况:
该文档将IPC :: Run3与其他替代方案进行了比较。即使您不决定使用它,也值得一读。 perlipc文档涵盖了许多方法,包括IPC :: Open2和IPC :: Open3。 在脚本顶部的某处添加以下行
这将包括必要的模块,默认情况下通常会在大多数Perl发行版中安装该模块。 (如果没有它,则可以使用CPAN进行安装。)然后,而不是打开,调用:
您可以通过将数据发送到$ cmd_in来将其发送到命令,然后通过从$ cmd_out中读取来读取命令的输出。 如果还希望能够读取命令的stderr流,则可以改用IPC :: Open3模块。 IPC :: Open3可能会做您想要的。它可以捕获STDERR和STDOUT。 http://metacpan.org/pod/IPC::Open3 我最近发现的一种非常简单的方法是IPC :: Filter模块。它使您可以非常直观地完成工作:
请注意,如果将列表传递给命令,它将如何在不通过外壳的情况下调用命令。它还可以很好地处理常见实用程序的错误。 (如果失败,则使用STDERR中的文本作为错误消息,它为 当然,由于它无法进行任何流处理,因此不适合用于大量数据。同样,错误处理的粒度可能不足以满足您的需求。但这使许多简单的情况确实非常简单。 有一个特殊的perl命令
可以在以下位置找到更多信息:http://sunsite.ualberta.ca/Documentation/Misc/perl-5.6.1/lib/IPC/Open2.html 我想您想看看IPC :: Open2 如果您不想包含额外的程序包,则可以
这与您的建议相反,但也应该起作用。 如果我只希望输出一行,或者想将结果分割到换行符以外的其他地方,我总是这样做:
如果要处理多行响应,请以数组形式获取结果:
|
相关内容
-
IE脚本错误如何做Web脚本错误解决技巧
IE脚本错误如何做Web脚本错误解决技巧,,这个问题是由于这样的...
-
字符库快捷键|字符串快捷键
字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行...
-
cad逐点标注快捷键|cad的逐点标注命令
cad逐点标注快捷键|cad的逐点标注命令,,cad的逐点标注命令工具...
-
cad快捷键命令|cad快捷键命令大全标注
cad快捷键命令|cad快捷键命令大全标注,,cad快捷键命令大全标注...
-
矩形cad快捷键|CAD矩形命令快捷键
矩形cad快捷键|CAD矩形命令快捷键,,CAD矩形命令快捷键CAD软件...
-
cad重复复制快捷键|cad连续复制快捷键命令
cad重复复制快捷键|cad连续复制快捷键命令,,1. cad连续复制快...
-
cmd命令快捷键|cmd快捷键大全
cmd命令快捷键|cmd快捷键大全,,cmd快捷键大全首先介绍第一种方...
-
cad布局常用快捷键|cad布局常用快捷键命令
cad布局常用快捷键|cad布局常用快捷键命令,,1. cad布局常用快...
-
cad平面设备快捷键|cad机械设计常用快捷键命令
cad平面设备快捷键|cad机械设计常用快捷键命令,,1. cad机械设...
-
电脑计算器命令|电脑计算器命令怎么用
电脑计算器命令|电脑计算器命令怎么用,,1. 电脑计算器命令怎么...
-
cad修改快捷键的命令|cad修改快捷键的命令大全
cad修改快捷键的命令|cad修改快捷键的命令大全,,cad修改快捷键...
-
电脑系统的启动服务项|启动系统服务命令
电脑系统的启动服务项|启动系统服务命令,,启动系统服务命令这...
-
cad等分命令快捷键|cad快速等分快捷键
cad等分命令快捷键|cad快速等分快捷键,,1. cad快速等分快捷键1...
-
cad旋转命令快捷键|cad图形旋转快捷键命令
cad旋转命令快捷键|cad图形旋转快捷键命令,,cad图形旋转快捷键...
-
cmd命令电脑重启电脑|cmd重启命令
cmd命令电脑重启电脑|cmd重启命令,,1. cmd重启命令使用win+r打...