我被要求编写一个从Git拉取最新代码、进行构建和执行一些自动化单元测试的脚本。
我发现有两个内置的Python模块可用于与Git交互: GitPython
和libgit2
。
我应该使用哪种方式/模块呢?
更简单的解决方案是使用Python的 subprocess
模块调用git。在您的情况下,这将拉取最新的代码并进行构建:
import subprocess
subprocess.call(["git", "pull"])
subprocess.call(["make"])
subprocess.call(["make", "test"])
文档:
从Python 3.5开始,.call()方法已被弃用。
https://docs.python.org/3.6/library/subprocess.html#older-high-level-api
目前推荐使用subprocess的.run()方法。
import subprocess
subprocess.run(["git", "pull"])
subprocess.run(["make"])
subprocess.run(["make", "test"])
当我查看文档时,发现上面的链接与被接受的答案相矛盾,因此我不得不进行一些研究。在这里补充我的意见,希望能为其他人节省一些时间。
我同意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!
我不得不在运行调用的基础上使用shlex
,因为我的命令对于单独的子进程来说过于复杂而无法理解。
import subprocess
import shlex
git_command = "git <command>"
subprocess.run(shlex.split(git_command))
#!/bin/sh
set -e
git pull
make
./your_test #change this line to actually launch the thing that does your test
.call()
已经被弃用。现在可以使用以下代码代替:import subprocess
subprocess.run(["git", "pull"])
等等。 - Bart Jonk