在Python代码中使用Git命令

hi3rlvi2  于 2022-11-27  发布在  Git
关注(0)|答案(7)|浏览(307)

我被要求编写一个脚本,从Git中提取最新的代码,进行构建,并执行一些自动化的单元测试。
我发现有两个内置的Python模块可以用来与Git进行交互:GitPythonlibgit2中的一个或多个。
我应该使用什么方法/模块?

moiiocjp

moiiocjp1#

一个更简单的解决方案是使用Python subprocess模块调用git。在你的例子中,这将拉取最新的代码并编译:

import subprocess
subprocess.call(["git", "pull"])
subprocess.call(["make"])
subprocess.call(["make", "test"])

文件:

kxe2p93d

kxe2p93d2#

我同意Ian Wetherbee的观点。你应该使用subprocess直接调用git。如果你需要在命令的输出上执行一些逻辑,那么你可以使用下面的subprocess调用格式。

import subprocess
PIPE = subprocess.PIPE
branch = 'my_branch'

process = subprocess.Popen(['git', 'pull', branch], stdout=PIPE, stderr=PIPE)
stdoutput, stderroutput = process.communicate()

if 'fatal' in stdoutput:
    # Handle error case
else:
    # Success!
7cwmlq89

7cwmlq893#

因此,在Python 3.5和更高版本中,.call()方法已经被弃用。
https://docs.python.org/3.6/library/subprocess.html#older-high-level-api
当前推荐的方法是在子进程上使用.run()方法。

import subprocess
subprocess.run(["git", "pull"])
subprocess.run(["make"])
subprocess.run(["make", "test"])

当我去阅读文档时,上面的链接与公认的答案相矛盾,我不得不做一些研究。添加我的2美分,希望保存别人一点时间。

ars1skjm

ars1skjm4#

EasyBuild中,我们依赖于GitPython,这工作得很好。
有关如何使用它的示例,请参见here

fzwojiic

fzwojiic5#

如果GitPython包不适合你,还有PyGit和杜尔维奇包,它们可以通过pip轻松安装。
但是,我个人只使用了子进程调用。对于我所需要的东西来说,这是完美的,这只是基本的git调用。对于更高级的东西,我推荐一个git包。

xxe27gdn

xxe27gdn6#

我不得不在 run call 上使用shlex,因为我的命令太复杂,subprocess 无法单独理解。

import subprocess
import shlex
git_command = "git <command>"
subprocess.run(shlex.split(git_command))
mwecs4sa

mwecs4sa7#

如果你使用的是Linux或Mac,为什么要使用python来完成这个任务呢?

#!/bin/sh
set -e
git pull
make
./your_test #change this line to actually launch the thing that does your test

相关问题