...
1import subprocess
2import time
3
4
5def run_and_assert(command, communicate=True):
6 print(f"Running command {command}")
7 output = subprocess.Popen(command, stdout=subprocess.PIPE)
8 if communicate:
9 stdout, stderr = output.communicate()
10 print("STDOUT", stdout.decode("utf-8") if stdout is not None else None)
11 print("STDERR", stderr.decode("utf-8") if stderr is not None else None)
12 assert output.returncode == 0, "non-zero exit status: %d" % output.returncode
13 return stdout.decode("utf-8") if stdout is not None else None
14 return None
15
16
17def run_with_retry(command, retries=0):
18 print(f"Running command {command}")
19 returncode = -1
20 decoded = ""
21 tries = 0
22 max_tries = retries + 1
23 while returncode != 0 and tries < max_tries:
24 output = subprocess.Popen(command, stdout=subprocess.PIPE)
25 if tries > 0:
26 print("SLEEPING 5 seconds, TRIES=%d" % tries)
27 time.sleep(5)
28 stdout, stderr = output.communicate()
29 print("STDOUT", stdout.decode("utf-8") if stdout is not None else None)
30 print("STDERR", stderr.decode("utf-8") if stderr is not None else None)
31 returncode = output.returncode
32 decoded = stdout.decode("utf-8") if stdout is not None else None
33 tries = tries + 1
34 assert returncode == 0, "non-zero exit status: %d" % output.returncode
35 return decoded
View as plain text