【发布时间】:2022-11-02 05:36:49
【问题描述】:
src = user/my.git dest = /home/git_name ver = 1.1
def run
p = subprocess.run(cmd, stdout=PIPE, stderr=PIPE)
我用以下 cmds 调用这个运行
1. self.run(['mkdir', '-p', dest])
2. self.run(['git', 'clone', '--no-checkout',src, dest])
3. self.run(['cd', dest, ';', 'git', 'checkout', '--detach', ver]])
输出:
第一次运行是成功的
第二次运行克隆得到错误 stderr=b"Cloning into ' /home/git_name'...\n
第三次运行成功。
这个目录 /home/git_name.OLD.1723430 被创建,我在这个目录中看到一个 .git 。 我还有一个指向 src 的文件 /home/git_name,基本上有一个指向 src 目录的链接。
这两个都应该发生在同一个目录中,我不知道为什么两者都有两个和部分结果。 我不确定出了什么问题
还, src = user/my.git/repos/tags/1.1 是标签的实际位置 当我尝试使用整个路径时 git clone 说路径不正确
为什么会这样?
【问题讨论】:
-
请注意
subprocess.run将shell=False作为默认值,这意味着您不能将cd <path>; <cmd>放入并期望它工作。有两种明显的方法来处理这个问题:使用cwd=可选参数至subprocess.run这样就不需要cd <path>,完全用Python解决这个问题;或使用git -C <path>,通过您运行的 Git 命令的参数来解决此问题。 -
你当然可以添加
shell=True,但是see xkcd。
标签: python git subprocess