+# -*- python3 -*-
# Thierry Parmentelat <thierry.parmentelat@inria.fr>
-# 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={}
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)
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):