gam*_*ver 18 perl stdout stderr
我是Perl的新手,想知道prg在以下场景中运行外部命令(调用它)的方法:
prg,stdout只得到它.prg,stderr只得到它.prg,得到了stdout和stderr,分别.cod*_*ict 27
您可以使用背景来执行外部程序并捕获它stdout和stderr.
默认情况下,反引号会丢弃stderr并仅返回stdout外部程序的内容.所以
$output = `cmd`;
Run Code Online (Sandbox Code Playgroud)
将捕获stdout程序cmd并丢弃stderr.
要捕获,stderr您可以使用shell的文件描述符:
$output = `cmd 2>&1 1>/dev/null`;
Run Code Online (Sandbox Code Playgroud)
捕获两者stdout,stderr你可以做:
$output = `cmd 2>&1`;
Run Code Online (Sandbox Code Playgroud)
使用上面的你不能者区分stderr的stdout.要离开stdout,stderr可以将两者重定向到单独的文件并读取文件:
`cmd 1>stdout.txt 2>stderr.txt`;
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,您可以使用qx//运算符(或反引号).它插入字符串并使用shell执行它们,因此您可以使用重定向.
捕获命令的STDOUT(STDERR不受影响):
$output = `cmd`;
Run Code Online (Sandbox Code Playgroud)要一起捕获命令的STDERR和STDOUT:
$output = `cmd 2>&1`;
Run Code Online (Sandbox Code Playgroud)捕获命令的STDERR但丢弃其STDOUT(这里的排序很重要):
$output = `cmd 2>&1 1>/dev/null`;
Run Code Online (Sandbox Code Playgroud)要交换命令的STDOUT和STDERR以捕获STDERR但是让它的STDOUT从旧的STDERR出来:
$output = `cmd 3>&1 1>&2 2>&3 3>&-`;
Run Code Online (Sandbox Code Playgroud)要分别读取命令的STDOUT和STDERR,最简单的方法是将它们单独重定向到文件,然后在程序完成时从这些文件中读取:
system("program args 1>program.stdout 2>program.stderr");
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
39811 次 |
| 最近记录: |