使用 subprocess.check_output 调用 git 命令。

    :param str path: git 仓库文件夹路径。
    :param \*args: git 的附加参数。
    :returns: 错误代码和调用结果。
    :rtype: int
    :rtype: string git 返回的信息，若执行出错则为错误信息。

def call(path, *args, encoding="utf-8", show_command=False):
    """使用 subprocess.check_output 调用 git 命令。

    :param str path: git 仓库文件夹路径。
    :param \*args: git 的附加参数。
    :returns: 错误代码和调用结果。
    :rtype: int
    :rtype: string git 返回的信息，若执行出错则为错误信息。

    """
    returncode = 0
    output = None
    try:
        # 2015-10-10 zrong
        # 在 windows 上使用 universal_newlines=True
        # 会导致输出信息为中文时出现编码错误
        # 原因是 check_out 中读入 stdout 内容的 read 方法没有传递编码参数
        # 因此不再使用 universal_newlines=True 这个参数
        # 而改用直接返回 bytes，然后对其解码
        arg_list = get_args(path, *args)
        if show_command:
            print('git call args:', arg_list)
        output = subprocess.check_output(arg_list, 
                stderr=subprocess.STDOUT)
        output = output.decode(encoding=encoding)
    except subprocess.CalledProcessError as err:
        returncode = err.returncode
        output = err.output.decode(encoding=encoding)
    return returncode, output