使用github webhook,我希望能够将任何更改拉到远程开发服务器上。目前,当在适当的目录中时,git pull
获取需要进行的任何更改。但是,我不知道如何从Python中调用该函数。我尝试了以下方法:
import subprocess
process = subprocess.Popen("git pull", stdout=subprocess.PIPE)
output = process.communicate()[0]
但这会导致以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
有没有办法在Python中调用这个bash命令?
7条答案
按热度按时间luaexgnf1#
你考虑过使用GitPython吗?它的设计就是为了帮你处理这些无聊的事情。
https://github.com/gitpython-developers/GitPython
a0x5cqrl2#
subprocess.Popen
需要一个程序名和参数的列表。您传递给它的是一个字符串,它(默认为shell=False
)等效于:这意味着子进程试图找到一个名为
git pull
的程序,但没有成功:在Python 3.3中,你的代码会引发异常FileNotFoundError: [Errno 2] No such file or directory: 'git pull'
,而是传入一个列表,如下所示:顺便说一下,在Python 2.7+中,你可以使用
check_output
便利函数来简化这段代码:此外,要使用git功能,完全不需要调用git二进制文件(虽然简单且可移植),可以考虑使用git-python或Dulwich。
of1yzvn43#
使用GitPython的公认答案比直接使用
subprocess
好不了多少。这种方法的问题在于,如果您想要解析输出,那么您最终只能看到“cerine”命令which is a bad idea的结果
以这种方式使用GitPython就像得到了一个闪亮的新工具箱,然后用它来代替里面的工具,用螺丝钉把它固定在一起。下面是API的设计使用方式:
如果要检查是否发生了更改,可以使用
qyuhtwio4#
如果你使用的是Python 3.5以上版本,那么对于它能处理的场景,你更喜欢
subprocess.run
而不是subprocess.Popen
。3yhwsihp5#
这是一个样本食谱,我一直在我的一个项目中使用。同意有多种方法来做到这一点虽然。:)
代码的问题是,没有为
subprocess.Popen()
传递数组,因此试图运行一个名为git pull
的二进制文件,而需要执行第一个参数为pull
的二进制文件git
,依此类推。busg9geu6#
试试看:
s3fp2yjn7#
试试看: