问题描述
我正在使用 PyGitHub 从使用 Python 脚本的 Ubuntu 服务器内部更新我的 GitHub.com 存储库。
我注意到有时我的脚本只是挂在那里,而没有错误消息表明出了什么问题。
这是我的剧本
from pathlib import Path
from typing import Optional
import typer
from github import Github,GithubException
app = typer.Typer()
@app.command()
def add_deploy_key(
token: Optional[str] = None,user_repo: Optional[str] = None,repo_name: Optional[str] = None
):
typer.echo("Starting to access GitHub.com... ")
try:
# using an access token
g = Github(token)
# I skipped a bunch of code to save space
for key in repo.get_keys():
if str(key.key) == str(pure_public_key):
typer.echo(
"We found an existing public key in " + user_repo + ",so we're NOT adding it"
)
return
rep_key = repo.create_key(
"DigitalOcean for " + repo_name,current_public_key,read_only=True
)
if rep_key:
typer.echo("Success with adding public key to repo in GitHub.com!")
typer.echo("")
typer.echo("The url to the deposited key is: " + rep_key.url)
else:
typer.echo("There's some issue when adding public key to repo in GitHub.com")
except GithubException as e:
typer.echo("There's some issue")
typer.echo(str(e))
return
if __name__ == "__main__":
app()
我触发的方式是在 bash 脚本中
output=$(python /opt/github-add-deploy-keys.py --token="$token" --user-repo="$user_repo" --repo-name="$repo_name")
它有效。但有时它只是挂在那里没有任何输出。而且由于它是间歇性的,而且不是始终如一地发生,因此很难调试。
我不确定这是打字机问题、网络问题还是 GitHub.com 问题。什么都没有。
我希望它快速且频繁地失败。我知道 GitHub 对象存在超时和重试。
见https://pygithub.readthedocs.io/en/latest/github.html?highlight=retry#github.MainClass.Github
我想知道我是否可以用这两个参数做任何事情,所以至少我可以看到正在做的事情。我可以添加很多 typer.echo
语句,但这会非常冗长。
我也不熟悉重试对象。我希望即使进行了重试,也会有一些 echo 语句告诉我正在尝试重试。
我可以尝试什么?
解决方法
超时应阻止 github 请求挂起,重试应使其工作,但根据文档,已经有一个默认超时。由于此问题用于调试,因此我建议将日志记录 python 库用于您的脚本在文件中运行的步骤。您可以找到一个很好的日志教程 Default logged in user to SQL Server column。
至于日志记录样式,由于您的案例有很多未知数,我会在脚本启动时、“创建密钥”步骤之前和“创建密钥”步骤之后进行记录,以防万一。您可以在脚本挂起时查看日志文件。
您可以创建一个 bash 脚本以在超时时运行您的脚本,并在程序以非零退出代码退出并让它运行过夜时收到通知:
timeout 5 python <yourscript>.py