首页 > 解决方案 > Python为子进程创建超时

问题描述

我正在编写一个 Python 脚本,它将刷新一个 Git 存储库,然后构建它。
该脚本将每天运行(例如在每日构建服务器上运行)。

问题是对我们服务器的 git 命令有时永远不会完成(好吧,我在 10 分钟或更长时间后终止进程)。

我想为子进程设置一个超时(并且可能放入一个重试循环)。
如何为子进程设置超时。

到目前为止,这是我的代码:

#------------------------------------------------------------------------------
#   Script to daily build Voyant 3
#------------------------------------------------------------------------------
import subprocess
import os

#------------------------------------------------------------------------------
#   Main program starts here.
#------------------------------------------------------------------------------
repo_dir = "c:/sandboxes/git/voyant-3"

#------------------------------------------------------------------------------
#   Change to repo (repository) folder.
#------------------------------------------------------------------------------
os.chdir(repo_dir);

#------------------------------------------------------------------------------
#   Refresh the repo (sandbox)
#------------------------------------------------------------------------------
subprocess.run(["git", "fetch", "--all]"]);

笔记:

  1. 使用 Python 27(首选)或 Python 36
  2. 使用 Windows 10(脚本将在 PC 上注册为服务)
  3. 使用 PyGit 的研究并不令人印象深刻;大多数用户说要使用 Python Subprocess。
  4. 来自 Python 文档:(https://docs.python.org/3/library/subprocess.html):

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=无,文本=无,环境=无,universal_newlines=无,**other_popen_kwargs)

标签: pythonsubprocess

解决方案


while True:
    try: subprocess.run(["git", "fetch", "--all"], timeout=600);
    except subprocess.TimeoutExpired: continue
    break

推荐阅读