6

Python スクリプトから Visual Studio ソリューションを構築します。ビルド出力をキャプチャできないことを除いて、すべてがうまく機能します。

p = subprocess.Popen(['devenv', 'solution.sln', '/build'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate()
ret = p.returncode

ここで、outerrは常に空です。に見られるように、これはビルドの成功に関係なく発生しp.returncodeます。

4

4 に答える 4

26

'devenv'から'devenv.com'に変更します。どうやらPopenは最初に.EXEを探しますが、シェルは最初に.COMを探します。'devenv.com'への切り替えは私のために働いた。

devenvは、インクリメンタルビルドのmsbuildよりも大幅に高速です。最新のプロジェクトでビルドを行っただけです。つまり、何も起こらないはずです。

devenv23秒msbuild55秒。

于 2009-10-29T19:59:25.243 に答える
2

msbuild.exe代わりに、stdoutとstderrにフィードバックを提供するように設計されたソリューションを構築する必要があります。msbuild.exeにあります

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe(VS2005ソリューションを構築するため)またはC:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe(VS2008ソリューションを構築するため)

のようなスイッチmsbuild.exeは使用しないことに注意してください。/builddevenv.exe

于 2009-10-06T13:58:48.387 に答える
0

stdoutこれはおそらく、実行しているソフトウェアがorに書き込めないためですstderr。おそらく、ターミナル/コンソールに直接書き込みます

その場合は、出力をキャプチャするためにいくつかのwin32 API 呼び出しが必要になります。

于 2009-10-06T13:50:32.163 に答える
-2

おそらくあなたの問題は、パイプのバッファがいっぱいになるのと同じです。良い答えについては、この質問を確認してください。

于 2009-10-06T13:59:09.480 に答える