我被要求编写一个脚本,从Git中提取最新的代码,进行构建,并执行一些自动化的单元测试。我发现有两个内置的Python模块可以用来与Git进行交互:GitPython和libgit2中的一个或多个。我应该使用什么方法/模块?
GitPython
libgit2
moiiocjp1#
一个更简单的解决方案是使用Python subprocess模块调用git。在你的例子中,这将拉取最新的代码并编译:
subprocess
import subprocess subprocess.call(["git", "pull"]) subprocess.call(["make"]) subprocess.call(["make", "test"])
文件:
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!
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美分,希望保存别人一点时间。
ars1skjm4#
在EasyBuild中,我们依赖于GitPython,这工作得很好。有关如何使用它的示例,请参见here。
fzwojiic5#
如果GitPython包不适合你,还有PyGit和杜尔维奇包,它们可以通过pip轻松安装。但是,我个人只使用了子进程调用。对于我所需要的东西来说,这是完美的,这只是基本的git调用。对于更高级的东西,我推荐一个git包。
xxe27gdn6#
我不得不在 run call 上使用shlex,因为我的命令太复杂,subprocess 无法单独理解。
shlex
import subprocess import shlex git_command = "git <command>" subprocess.run(shlex.split(git_command))
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
7条答案
按热度按时间moiiocjp1#
一个更简单的解决方案是使用Python
subprocess
模块调用git。在你的例子中,这将拉取最新的代码并编译:文件:
kxe2p93d2#
我同意Ian Wetherbee的观点。你应该使用subprocess直接调用git。如果你需要在命令的输出上执行一些逻辑,那么你可以使用下面的subprocess调用格式。
7cwmlq893#
因此,在Python 3.5和更高版本中,.call()方法已经被弃用。
https://docs.python.org/3.6/library/subprocess.html#older-high-level-api
当前推荐的方法是在子进程上使用.run()方法。
当我去阅读文档时,上面的链接与公认的答案相矛盾,我不得不做一些研究。添加我的2美分,希望保存别人一点时间。
ars1skjm4#
在EasyBuild中,我们依赖于GitPython,这工作得很好。
有关如何使用它的示例,请参见here。
fzwojiic5#
如果GitPython包不适合你,还有PyGit和杜尔维奇包,它们可以通过pip轻松安装。
但是,我个人只使用了子进程调用。对于我所需要的东西来说,这是完美的,这只是基本的git调用。对于更高级的东西,我推荐一个git包。
xxe27gdn6#
我不得不在 run call 上使用
shlex
,因为我的命令太复杂,subprocess 无法单独理解。mwecs4sa7#
如果你使用的是Linux或Mac,为什么要使用python来完成这个任务呢?