python - 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]"]);
笔记:
- 使用 Python 27(首选)或 Python 36
- 使用 Windows 10(脚本将在 PC 上注册为服务)
- 使用 PyGit 的研究并不令人印象深刻;大多数用户说要使用 Python Subprocess。
- 来自 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)
解决方案
while True:
try: subprocess.run(["git", "fetch", "--all"], timeout=600);
except subprocess.TimeoutExpired: continue
break
推荐阅读
- ajax - 网页抓取初学者。AJAX POST 请求不起作用
- c# - 如何在 C# 中复制 Postman POST 请求
- vba - 检查目录是否存在而没有目录权限
- parallel-processing - 使用并行重写嵌套循环,其中第二个循环的参数取决于第一个循环的参数
- tensorflow - InvalidArgumentError:Conv2DCustomBackpropInput:out_backprop 的大小与训练 UNet 时计算的不匹配
- javascript - 未捕获的类型错误:无法读取 null 的属性“样式”
:3:40 - sql - 简化给定的 GCP BQ 查询
- spring-boot - 如何使用 Spring 集成 DSL 将预期回复设置为 false。错误没有可用的输出通道或回复通道标头
- ruby-on-rails - 如果散列具有 id,则将散列作为关联分配给对象失败,需要了解原因
- php - WooCommerce - 更改一个变体的价格,只要它具有一定的属性值