我正在编写一个脚本来自动化一些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']
的这段代码确实确实检出了主服务器。但是它将停止执行,显然是因为错误变量不为空。我尝试将输出打印为以下错误:"Your branch is up-to-date with 'origin/master'.\n"
"Switched to branch 'master'\n"
Stopping execution!
如您所见,它成功检出了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
communication()返回一个元组(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)