gpt4 book ai didi

Python 子进程 git checkout 返回错误,即使没有错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:02 24 4
gpt4 key购买 nike

我正在编写一个脚本来自动执行一些 GIT 任务。我知道 GITPython,但我不想使用它。即使艰难,也可能更容易。

我得到了以下代码:

def executeCommand(cmd):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out, error = p.communicate()
if not error:
return out.strip()
else:
print repr(out)
print repr(error)
print "Stopping execution!\r"
exit(0)

给出命令 ['git', 'checkout', 'master'] 的这段代码确实检查了 master。但是它会停止执行,显然是因为错误变量不为空。我尝试打印以下错误输出:

"Your branch is up-to-date with 'origin/master'.\n"
"Switched to branch 'master'\n"
Stopping execution!

正如你所看到的,它成功地 check out 了 master 分支(也通过 git status 验证)。但是为什么第二行填的是error变量呢?如何处理?或者没有办法正确处理这个问题?还是我不应该做任何错误检查?最好的解决方案/解释是什么?

谢谢!

最佳答案

这不是错误!它是 stderr 上的输出 :)

如果你在 linux 终端上,你可以通过运行以下命令来测试它

git checkout master 2>/dev/null

# You shouldn't see any output.
# This is because git is writing those messages to stderr.

根据 subprocess docs

communicate() returns a tuple (stdoutdata, stderrdata)

即stdout 和 stderr 上的输出。

如果要检查错误,应该使用returncode 属性。

你的情况

stdout, stderr = p.communicate()
if p.returncode == 0:
return stdout.strip()

else:
# handle error
print repr(stdout)
print repr(stderr)
print "stopping execution!\r"
exit(0)

关于Python 子进程 git checkout 返回错误,即使没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653229/

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