- Timestamp:
- Oct 29, 2019, 3:57:35 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- b067d9b
- Parents:
- c3a2007
- Location:
- tests
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/pybin/tools.py
rc3a2007 r8364209 24 24 # helper functions to run terminal commands 25 25 def sh(*cmd, timeout = False, output_file = None, input_file = None, input_text = None, error = subprocess.STDOUT, ignore_dry_run = False): 26 cmd = list(cmd) 27 28 if input_file and input_text: 29 return 401, "Cannot use both text and file inputs" 30 31 # if this is a dry_run, only print the commands that would be ran 32 if settings.dry_run and not ignore_dry_run: 33 cmd = "{} cmd: {}".format(os.getcwd(), ' '.join(cmd)) 34 if output_file and not isinstance(output_file, int): 35 cmd += " > " 36 cmd += output_file 37 38 if error and not isinstance(error, int): 39 cmd += " 2> " 40 cmd += error 41 42 if input_file and not isinstance(input_file, int) and os.path.isfile(input_file): 43 cmd += " < " 44 cmd += input_file 45 46 print(cmd) 47 return 0, None 48 49 with contextlib.ExitStack() as onexit: 50 # add input redirection if needed 51 input_file = openfd(input_file, 'r', onexit, True) 52 53 # add output redirection if needed 54 output_file = openfd(output_file, 'w', onexit, False) 55 56 # add error redirection if needed 57 error = openfd(error, 'w', onexit, False) 58 59 # run the desired command 60 try: 61 proc = subprocess.run( 26 try: 27 cmd = list(cmd) 28 29 if input_file and input_text: 30 return 401, "Cannot use both text and file inputs" 31 32 # if this is a dry_run, only print the commands that would be ran 33 if settings.dry_run and not ignore_dry_run: 34 cmd = "{} cmd: {}".format(os.getcwd(), ' '.join(cmd)) 35 if output_file and not isinstance(output_file, int): 36 cmd += " > " 37 cmd += output_file 38 39 if error and not isinstance(error, int): 40 cmd += " 2> " 41 cmd += error 42 43 if input_file and not isinstance(input_file, int) and os.path.isfile(input_file): 44 cmd += " < " 45 cmd += input_file 46 47 print(cmd) 48 return 0, None 49 50 with contextlib.ExitStack() as onexit: 51 # add input redirection if needed 52 input_file = openfd(input_file, 'r', onexit, True) 53 54 # add output redirection if needed 55 output_file = openfd(output_file, 'w', onexit, False) 56 57 # add error redirection if needed 58 error = openfd(error, 'w', onexit, False) 59 60 # run the desired command 61 # use with statement to make sure proc is cleaned 62 # don't use subprocess.run because we want to send SIGABRT on exit 63 with subprocess.Popen( 62 64 cmd, 63 65 **({'input' : bytes(input_text, encoding='utf-8')} if input_text else {'stdin' : input_file}), 64 66 stdout = output_file, 65 stderr = error, 66 timeout = settings.timeout.single if timeout else None 67 ) 68 69 return proc.returncode, proc.stdout.decode("utf-8") if proc.stdout else None 70 except subprocess.TimeoutExpired: 71 return 124, str(None) 67 stderr = error 68 ) as proc: 69 70 try: 71 out, _ = proc.communicate( 72 timeout = settings.timeout.single if timeout else None 73 ) 74 75 return proc.returncode, out.decode("utf-8") if out else None 76 except subprocess.TimeoutExpired: 77 proc.send_signal(signal.SIGABRT) 78 proc.communicate() 79 return 124, str(None) 80 81 except Exception as ex: 82 print ("Unexpected error: %s" % ex) 83 raise 72 84 73 85 def is_ascii(fname): -
tests/test.py
rc3a2007 r8364209 210 210 except KeyboardInterrupt: 211 211 return False, "" 212 except :213 print("Unexpected error in worker thread ", file=sys.stderr)212 except Exception as ex: 213 print("Unexpected error in worker thread: %s" % ex, file=sys.stderr) 214 214 sys.stderr.flush() 215 215 return False, ""
Note: See TracChangeset
for help on using the changeset viewer.