2016-08-14 4 views
1

私はnmakeを呼び出すpythonスクリプトを持っています。 powershellでこのスクリプトを次のように呼び出すとします。行の最後にリダイレクトを追加した後、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 ----

私は考えられる理由はありますか外部nmakestderrに書き込み可能な場合、Powershellはエラーを表示します。

ただし、リダイレクトを行わない最初の例ではエラーは表示されません。もう1つはstderrからstdoutにリダイレクトされ、実際にはエラーが表示されます。それで何故か?

+1

[PsExecは、エラーメッセージをスローしますが、何の問題もなく動作します]の可能な重複(http://stackoverflow.com/questions/18380227/psexec-throws-error-messages -but-works-with-any-problems) – TessellatingHeckler

+0

しかし、私はstderrをリダイレクトしています。最初のコードスニペットにエラーが表示されません – Zijing

+0

Powershellのリダイレクトはテキストではなくリダイレ​​クトオブジェクトです。 ErrorRecordオブジェクトはstdoutでも印刷されています。 – Zijing

答えて

0

私は私の質問に答えることができますので、他の人には閉鎖して役立てることができます。 ErrorRecordオブジェクトがstdoutで印刷されているので、

それがエラーを示して理由があります。

そして2>&1ではなく、テキストのオブジェクトをリダイレクトします。したがって、リダイレクトを追加した後、ErrorRecordstdoutにリダイレクトされます。

詳しい情報はで見つけることができます:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError

関連する問題