我是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`;