1# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5"""Common utility functions that are not touch specific.""" 6 7import logging 8import os 9import subprocess 10import sys 11import termios 12import tty 13 14 15def simple_system(cmd): 16 """Replace autotest utils.system() locally. 17 18 This method is grabbed from hardware_Trackpad and was written by truty. 19 """ 20 ret = subprocess.call(cmd, shell=True) 21 if ret: 22 logging.warning('Command (%s) failed (ret=%s).', cmd, ret) 23 return ret 24 25 26def simple_system_output(cmd): 27 """Replace autotest utils.system_output() locally. 28 29 This method is grabbed from hardware_Trackpad and was written by truty. 30 """ 31 try: 32 proc = subprocess.Popen(cmd, shell=True, 33 stdout=subprocess.PIPE, 34 stderr=subprocess.STDOUT) 35 stdout, _ = proc.communicate() 36 except Exception, e: 37 logging.warning('Command (%s) failed (%s).', cmd, e) 38 else: 39 if proc.returncode: 40 return None 41 return stdout.strip() 42 43 44def getch(): 45 """Get a single character without typing ENTER.""" 46 fin = sys.stdin 47 old_attrs = termios.tcgetattr(fin) 48 tty.setraw(fin.fileno()) 49 try: 50 char = fin.read(1) 51 except ValueError: 52 char = '' 53 finally: 54 termios.tcsetattr(fin, termios.TCSADRAIN, old_attrs) 55 return char 56 57 58def program_exists(program): 59 """Check if an executable program exists.""" 60 return os.system('which %s > /dev/null 2>&1' % program) == 0 61 62 63def print_and_exit(msg, exit_code=1): 64 """Print a message and exit.""" 65 print msg 66 sys.exit(exit_code) 67 68 69class Debug: 70 """A simple class to print the debug message.""" 71 def __init__(self, debug_flag=False): 72 self._debug_flag = debug_flag 73 74 def print_msg(self, msg): 75 """Print the message if _debug_flag is True.""" 76 if self._debug_flag: 77 print msg 78