博主搞了个项目,需要在线静默更新用户程序文件夹下的一些文件。捣鼓了半天终于搞出来了,特来分享。
工具:python 3.X, GitLab
用到的库:gitlab
注:博主这里的Gitlab是同事在服务器上弄好的,具体怎么在服务器上搭建GitLab,博主也不会…(~ = ▽ = )~,等会上传本书,大家一起学习吧。
第一步:安装python-gitlab包
pip install python-gitlab
第二步:在GitLab网页上生成AccessToken
账户——Settings
左侧Access Tokens,根据要求填写,建议有效期弄长点,Scope勾选 □API,弄完点击create。
然后一定要把生成的Access Token另外存起来!!因为你一旦离开这个界面,就再也看不到了。
第三步:开始码代码
直接上博主的测试代码:
这里注意,下载后初次decode会得到bytes格式的内容,
针对编译过的文件,比如 .pyd, .exe类的文件,直接使用bytes格式配合‘wb’形式写入。
但是对于可编辑的文件,比如 .py 文件需要二次decode,获得str()格式,使用‘w’写入,这样中文才不会乱码。
可以用正则表达式来判断文件后缀名。
博主亲身试验!
# gilab包
import gitlab
class onlineUpdate:
# 初始化
def __init__(self):
# 服务器地址
self.url = 'https://xx.xx.xx.xx'
# 前面生成的Access Token
self.accessToken = 'xxxxxxxx'
# 登录
def login(self):
gl = gitlab.Gitlab(self.url,self.accessToken)
return gl
# 获得项目:projectID的格式随意,反正我就写了个数字进去
def getProject(self,projectID):
gl = self.login()
projects = gl.projects.get(projectID)
return projects
# 获得project下单个文件
def getContent(self):
projects = self.getProject(5)
# 获得文件
f = projects.files.get(file_path='paramRef.cp36-win_amd64.pyd',ref='master')
# 第一次decode获得bytes格式的内容
content = f.decode()
# 第二次decode获得str
# content = content.decode()
# 存到本地
with open('paramRef.cp36-win_amd64.pyd', 'wb') as code:
code.write(content)
# 测试
ou = onlineUpdate()
ou.getContent()