gpt4 book ai didi

python - 使用 Python 在控制台上读取 ant 构建输出

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:46 32 4
gpt4 key购买 nike

我正在尝试设置一个脚本来读取 Ant 生成的输出。我的背景是我正在处理 Salesforce 代码部署和检索。这些都是用 Ant 命令完成的,结果通常显示在屏幕上(我也可以获得返回码)。

构建成功后获取代码很容易。然而,当构建失败时,ant 看起来会返回两个独立的输出数据“片段”。不过,Python 的 subprocess.check_output 仅获取第一部分。我还需要第二部分,因为它是注册所有部署错误的地方。

示例:

出于安全原因,

<18digitcodehere> 代替原始代码。

成功

[sf:retrieve] Request for a retrieve submitted successfully.
[sf:retrieve] Request ID for the current retrieve task: <18digitcodehere>
[sf:retrieve] Waiting for server to finish processing the request...
[sf:retrieve] Request Status: Pending
[sf:retrieve] Request Status: Succeeded
[sf:retrieve] Finished request <18digitcodehere> successfully.

失败

第一部分:

[sf:deploy] Request for a deploy submitted successfully.
[sf:deploy] Request ID for the current deploy task: 0Af1a0000081rk1CAA
[sf:deploy] Waiting for server to finish processing the request...
[sf:deploy] Request Status: Pending
[sf:deploy] Request Status: Pending
[sf:deploy] Request Status: Failed

第二部分:

此内容包含我想阅读的错误。而且不显示...

BUILD FAILED                                                                        
<mySystempath>\build.xml:125:
*********** DEPLOYMENT FAILED ***********
Request ID: <18digitcodehere>

All Component Failures:
1. labels/CustomLabels.labels (Something) -- Error: Not in package.xml
2. labels/CustomLabels.labels (AnotherThing) -- Error: Not in package.xml
3. labels/CustomLabels.labels (Thinggy) -- Error: Not in package.xml
4. labels/CustomLabels.labels (YetAnotherThing) -- Error: Not in package.xml
...

我当前的脚本是这样的:

导入子流程,重新

try:
result = subprocess.check_output(['ant', 'validatedeployment'], universal_newlines=True, shell=True)
# I can get the code using some regex magic here

except subprocess.CalledProcessError as e:
# the exception is thrown when the result is different from 0, I believe
# but here I get the first part of the output, but not the second part

所以现在我可以获取构建成功的信息(基本上,我需要获取的是消息中的“成功”),而当构建失败时,我得到它失败的信息,但不得到失败的真正原因。

有什么建议吗?

最佳答案

Ant 将错误消息写入 stderr,而不是 stdout

默认情况下,Python 的 subprocess.check_output 不会捕获 stderr

要捕获stderr,请使用以下命令:

subprocess.check_output(
['ant', 'validatedeployment'],
universal_newlines=True,
shell=True,
stderr=subprocess.STDOUT # add this line
)

关于python - 使用 Python 在控制台上读取 ant 构建输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114112/

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