X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2Futils.py;h=55a990cc5977df63f4c575ca66c9e12d59f3eba4;hb=eeba8e303edbfc5e926767ba22294beda642ecba;hp=b7fd8ef08a5463b9c0ea3b92947981eb2aea0225;hpb=8666ae7f0291e8d115e166ef555f02abafc40fc8;p=tests.git diff --git a/system/utils.py b/system/utils.py index b7fd8ef..55a990c 100644 --- a/system/utils.py +++ b/system/utils.py @@ -1,7 +1,13 @@ +# -*- python3 -*- # Thierry Parmentelat -# Copyright (C) 2010 INRIA +# Copyright (C) 2015 INRIA # -import time, os, re, glob, sys +import sys +import time +import os +import re +import glob +import subprocess from pprint import PrettyPrinter options={} @@ -21,8 +27,9 @@ def pprint(message, spec, depth=2): PrettyPrinter(indent=8, depth=depth).pprint(spec) - -def system(command, background=False, silent=False, dry_run=None): +# set a default timeout to 15 minutes - this should be plenty even for installations +# call with timeout=None if the intention really is to wait until full completion +def system(command, background=False, silent=False, dry_run=None, timeout=15*60): dry_run = dry_run if dry_run is not None else getattr(options, 'dry_run', False) if dry_run: print('dry_run:', command) @@ -44,7 +51,11 @@ def system(command, background=False, silent=False, dry_run=None): sys.stdout.flush() if not silent: command = "set -x; " + command - return os.system(command) + try: + return subprocess.call(command, shell=True, timeout=timeout) + except subprocess.TimeoutExpired as e: + header("TIMEOUT when running command {}- {}".format(command, e)) + return -1 ### WARNING : this ALWAYS does its job, even in dry_run mode def output_of (command):