【问题标题】:subprocess.check_call: Command '['git', 'clone']' returned non-zero exit status 127subprocess.check_call:命令'['git','clone']'返回非零退出状态127
【发布时间】:2021-01-25 09:14:15
【问题描述】:

我正在开发一个微服务,该微服务为用户编写了以下脚本,该用户希望将 ssh 放入远程环境并 git clone 存储库。我已经为环境指定了GIT_SSHGIT_PYTHON_GIT_EXECUTABLE,然后运行git clone

def clone_if_local_repo_absent(local_repo_path, remote_repo_url):
    GIT_SSH = '...'
    GIT_PYTHON_GIT_EXECUTABLE = '/usr/bin/git'
    my_env = os.environ.copy()
    my_env["GIT_SSH"] = GIT_SSH
    my_env["GIT_PYTHON_GIT_EXECUTABLE"] = GIT_PYTHON_GIT_EXECUTABLE
    # Clones to directory specified
    exe_command = shlex.split('git clone {remote_repo_url} {repo_name}'.format(remote_repo_url=remote_repo_url, repo_name=local_repo_path))
    subprocess.check_call(exe_command, env=my_env, shell=True)

在运行脚本时,我收到错误:Command '['git', 'clone', remote_repo_url, 'LOCAL']' returned non-zero exit status 127. 我该如何解决这个错误?

【问题讨论】:

  • 你为什么不使用gitpython之类的东西?
  • 为什么是str.formatshlex.split 而不是简单的check_call(['git', 'clone', remote_repo_url, local_repo_path], ...)
  • 关于错误 - 这意味着 git 失败。您是否从控制台尝试过 git clone remote_repo_url LOCAL 并查看 git 抱怨什么?
  • 我无法使用 gitpython,因为它没有安装在远程环境中。 Git 也没有安装在远程环境中。所以我试图将 GIT_SSH 传递给subprocess call 中的git clone 命令。但是,git clone 仍然无法执行,因为它显示了退出状态 127

标签: python git ssh subprocess clone


【解决方案1】:

Git ProBook中所述:

GIT_SSH(如果指定)是在 Git 尝试连接到 SSH 主机时调用的程序,而不是 ssh
它的调用方式类似于$GIT_SSH [username@]host [-p <port>] <command>

请注意,这不是自定义 ssh 调用方式的最简单方法;它不支持额外的命令行参数,因此您必须编写一个包装脚本并将 GIT_SSH 设置为指向它。
使用~/.ssh/config 文件可能更容易。

所以这根本不在远程端执行。它被执行以连接到远程服务器。

如果远程环境中未安装 Git,则从 ssh 会话执行的任何 git clone 都将不起作用。

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2021-12-29
    • 2019-11-28
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2014-04-09
    • 2016-01-01
    相关资源
    最近更新 更多