gpt4 book ai didi

python - 当我将 stdout 和 stdout 分配给 os.devnull 时,msbuild 失败并返回 1,否则返回 0

转载 作者:行者123 更新时间:2023-11-30 23:47:05 25 4
gpt4 key购买 nike

我正在尝试编写一个Python脚本,该脚本可以从Mercurial存储库中检查Visual Studio 2010 native C++项目的修订版本,构建它,然后在各种场景下运行程序。然后我将比较其他构建的结果等。所以我刚刚开始使用原型(prototype),并且我有:

from subprocess import call
import os
import tempfile
import sys


def main():

temp_repo_name = 'temprepo'
d = tempfile.mkdtemp()
os.chdir(os.path.normpath(d))

command1 = ['hg', 'clone', r'C:\temp\1\jxg_hcr', temp_repo_name]

devnull = open(os.devnull,'w')

rc1 = call(command1,stdout=devnull, stderr=devnull)

if rc1 != 0:
print('could not clone repo into temporary directory. Terminating Program')
sys.exit(1)

devnull.close()

devnull = open(os.devnull,'w')

os.chdir(temp_repo_name)

command2 = [r'msbuild', r'hcr_dll.sln', r'/t:Rebuild',r'/p:Configuration=Release']
rc2 = call(command2,stdout=devnull, stderr=devnull)

print rc2
if rc2 != 0:
print('could not build repo. Terminating Program')
sys.exit(1)

devnull.close()

if __name__ == '__main__':
main()

当我运行它时,我在控制台上得到以下输出:

C:\programming\eclipse_workspace\hcr_cli_build>python hcr_cli_build.py
0
1
could not build repo. Terminating Program

但是当我将 command2 的行更改为

rc2 = call(command2)

我明白

0
<bunch of build output>
0

并且构建成功。我不知道为什么当我重定向时它会失败。

有什么想法吗?也许只是一个我看不到的愚蠢错误?

注意:我认为我并不需要每次都关闭并重新打开 devnull,但这只是我在尝试解决问题时尝试的方法。当我一直保持打开状态并在最后关闭它时,我会得到相同的结果。

EDIT1:当我按照 David Hess 的建议尝试时,这也从命令行失败。

EDIT2:我还验证了当我使用样板 Main 函数创建空的 C# 控制台应用程序时会发生同样的问题。当 msbuild 未重定向到 NUL 时,它将通过 gui 和命令行进行构建,但是当我进行重定向时,它会返回 1 并且不会构建。

赏金编辑:我最感兴趣的是为什么会发生这种情况。显然,我也希望能够默默地成功,如果返回码为 0,只输出一条消息说“构建顺利”,所以如果没有人能告诉我为什么会发生这种情况,赏金将流向最佳解决方案。

我还在 mintty.exe 上尝试了 bash 脚本:

#!/bin/bash
for i in 1 2 3 4
do
echo "doing $i"
msbuild.exe /c/temp/$i/jxg_hcr/hcr_dll.sln //t:Rebuild //p:Configuration=Release
echo $?
done

可以工作(它打印所有输出并成功构建,然后将 0 打印到控制台),但是

#!/bin/bash
for i in 1 2 3 4
do
echo "doing $i"
msbuild.exe /c/temp/$i/jxg_hcr/hcr_dll.sln //t:Rebuild //p:Configuration=Release > /dev/null
echo $?
done

不执行构建,只是将 1 返回到控制台。

最佳答案

关于python - 当我将 stdout 和 stdout 分配给 os.devnull 时,msbuild 失败并返回 1,否则返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com