捕获程序 stdout 和 stderr 以分离变量 [英] Capture program stdout and stderr to separate variables
本文介绍了捕获程序 stdout 和 stderr 以分离变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以在一次运行中将 stdout 从外部程序重定向到一个变量,并将 stderr 从外部程序重定向到另一个变量?
Is it possible to redirect stdout from an external program to a variable and stderr from external programs to another variable in one run?
例如:
$global:ERRORS = @();
$global:PROGERR = @();
function test() {
# Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT?
$OUTPUT = (& myprogram.exe 'argv[0]', 'argv[1]');
if ( $OUTPUT | select-string -Pattern "foo" ) {
# do stuff
} else {
$global:ERRORS += "test(): oh noes! 'foo' missing!";
}
}
test;
if ( @($global:ERRORS).length -gt 0 ) {
Write-Host "Script specific error occurred";
foreach ( $err in $global:ERRORS ) {
$host.ui.WriteErrorLine("err: $err");
}
} else {
Write-Host "Script ran fine!";
}
if ( @($global:PROGERR).length -gt 0 ) {
# do stuff
} else {
Write-Host "External program ran fine!";
}
一个乏味的例子,但我想知道这是否可能?
A dull example however I am wondering if that is possible?
推荐答案
最简单的方法是使用文件作为 stderr 输出,例如:
The easiest way to do this is to use a file for the stderr output, e.g.:
$output = & myprogram.exe 'argv[0]', 'argv[1]' 2>stderr.txt
$err = get-content stderr.txt
if ($LastExitCode -ne 0) { ... handle error ... }
我还会使用 $LastExitCode 检查本机控制台 EXE 文件中的错误.
I would also use $LastExitCode to check for errors from native console EXE files.
这篇关于捕获程序 stdout 和 stderr 以分离变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文