如何运行外部命令并在Perl中捕获其输出?

我是Perl的新人,想知道在以下情况下运行外部命令(称为prg)的方法:

>运行prg,只得到它的stdout.
>运行prg,只得到它的stderr.
>运行prg,分别得到它的stdout和stderr.

解决方法

您可以使用backtic来执行外部程序并捕获其stdout和stderr.

默认情况下,反引号丢弃stderr并只返回外部程序的stdout

$output = `cmd`;

将捕获程序cmd的stdout并丢弃stderr.

要捕获stderr,您可以使用shell的文件描述符:

$output = `cmd 2>&1 1>/dev/null`;

要捕获stdout和stderr,你可以做:

$output = `cmd 2>&1`;

使用上述方法,您将无法将stderr与stdout区分开来.要将stdout从stderr中分离出来,可以将其重定向到单独的文件并读取文件:

`cmd 1>stdout.txt 2>stderr.txt`;

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...