为什么在行尾添加重定向后,PowerShell 会显示错误?
Why following PowerShell show error after add redirection at the end of line?
我有一个 python 脚本可以调用 nmake
。我想按如下方式在 powershell 中调用此脚本。
python D:\build.py -f folder
运行正常,输出如下:
Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation. All rights reserved.
但是,如果我添加重定向以使所有 stderr&stdout
转到 build.log
,如下所示,它会显示红色错误:
python D:\build.py -f folder 2>&1 | tee build.log
python :
At line:1 char:1
+ python D:\source_code\media\media\build_system\build.py -f xplatform_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation. All rights reserved.
---- 编辑 1----
我理解可能的原因是外部 nmake
可执行文件写入 stderr
,然后 Powershell 显示错误。
但是第一个没有重定向的例子没有显示错误。第二个,将 stderr
重定向到 stdout
,实际上显示错误。那么有什么原因吗?
我想回答我的问题,这样它就可以关闭并对其他人有所帮助。
它显示错误的原因是因为 ErrorRecord
对象在 stdout
.
中打印
并且 2>&1
重定向对象而不是文本。所以在添加重定向后,ErrorRecord
被重定向到 stdout
。
可以在以下位置找到更多信息:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError
我有一个 python 脚本可以调用 nmake
。我想按如下方式在 powershell 中调用此脚本。
python D:\build.py -f folder
运行正常,输出如下:
Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation. All rights reserved.
但是,如果我添加重定向以使所有 stderr&stdout
转到 build.log
,如下所示,它会显示红色错误:
python D:\build.py -f folder 2>&1 | tee build.log
python :
At line:1 char:1
+ python D:\source_code\media\media\build_system\build.py -f xplatform_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Microsoft (R) Program Maintenance Utility Version 11.00.50727.1
Copyright (C) Microsoft Corporation. All rights reserved.
---- 编辑 1----
我理解可能的原因是外部 nmake
可执行文件写入 stderr
,然后 Powershell 显示错误。
但是第一个没有重定向的例子没有显示错误。第二个,将 stderr
重定向到 stdout
,实际上显示错误。那么有什么原因吗?
我想回答我的问题,这样它就可以关闭并对其他人有所帮助。
它显示错误的原因是因为 ErrorRecord
对象在 stdout
.
并且 2>&1
重定向对象而不是文本。所以在添加重定向后,ErrorRecord
被重定向到 stdout
。
可以在以下位置找到更多信息:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError