Clone of official tools

Committer:
The Other Jimmy
Date:
Wed Jan 04 11:58:24 2017 -0600
Revision:
31:8ea194f6145b
Parent:
24:25bff2709c20
Child:
36:96847d42f010
Update tools to follow mbed-os tools release 5.3.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:66f3b5499f7f 1 #! /usr/bin/env python2
screamer 0:66f3b5499f7f 2 """
screamer 0:66f3b5499f7f 3 mbed SDK
screamer 0:66f3b5499f7f 4 Copyright (c) 2011-2013 ARM Limited
screamer 0:66f3b5499f7f 5
screamer 0:66f3b5499f7f 6 Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:66f3b5499f7f 7 you may not use this file except in compliance with the License.
screamer 0:66f3b5499f7f 8 You may obtain a copy of the License at
screamer 0:66f3b5499f7f 9
screamer 0:66f3b5499f7f 10 http://www.apache.org/licenses/LICENSE-2.0
screamer 0:66f3b5499f7f 11
screamer 0:66f3b5499f7f 12 Unless required by applicable law or agreed to in writing, software
screamer 0:66f3b5499f7f 13 distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:66f3b5499f7f 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:66f3b5499f7f 15 See the License for the specific language governing permissions and
screamer 0:66f3b5499f7f 16 limitations under the License.
screamer 0:66f3b5499f7f 17
screamer 0:66f3b5499f7f 18
screamer 0:66f3b5499f7f 19 TEST BUILD & RUN
screamer 0:66f3b5499f7f 20 """
screamer 0:66f3b5499f7f 21 import sys
The Other Jimmy 31:8ea194f6145b 22 import json
screamer 0:66f3b5499f7f 23 from time import sleep
screamer 0:66f3b5499f7f 24 from shutil import copy
The Other Jimmy 31:8ea194f6145b 25 from os.path import join, abspath, dirname
screamer 0:66f3b5499f7f 26
screamer 0:66f3b5499f7f 27 # Be sure that the tools directory is in the search path
screamer 0:66f3b5499f7f 28 ROOT = abspath(join(dirname(__file__), ".."))
screamer 0:66f3b5499f7f 29 sys.path.insert(0, ROOT)
screamer 0:66f3b5499f7f 30
screamer 0:66f3b5499f7f 31 from tools.utils import args_error
The Other Jimmy 31:8ea194f6145b 32 from tools.utils import NotSupportedException
screamer 0:66f3b5499f7f 33 from tools.paths import BUILD_DIR
The Other Jimmy 31:8ea194f6145b 34 from tools.paths import MBED_LIBRARIES
screamer 0:66f3b5499f7f 35 from tools.paths import RTOS_LIBRARIES
screamer 0:66f3b5499f7f 36 from tools.paths import RPC_LIBRARY
screamer 0:66f3b5499f7f 37 from tools.paths import ETH_LIBRARY
screamer 0:66f3b5499f7f 38 from tools.paths import USB_HOST_LIBRARIES, USB_LIBRARIES
screamer 0:66f3b5499f7f 39 from tools.paths import DSP_LIBRARIES
screamer 0:66f3b5499f7f 40 from tools.paths import FS_LIBRARY
screamer 0:66f3b5499f7f 41 from tools.paths import UBLOX_LIBRARY
screamer 0:66f3b5499f7f 42 from tools.tests import TESTS, Test, TEST_MAP
screamer 0:66f3b5499f7f 43 from tools.tests import TEST_MBED_LIB
screamer 22:9e85236d8716 44 from tools.tests import test_known, test_name_known
screamer 0:66f3b5499f7f 45 from tools.targets import TARGET_MAP
screamer 0:66f3b5499f7f 46 from tools.options import get_default_options_parser
The Other Jimmy 31:8ea194f6145b 47 from tools.options import extract_profile
screamer 0:66f3b5499f7f 48 from tools.build_api import build_project
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 49 from tools.build_api import mcu_toolchain_matrix
screamer 22:9e85236d8716 50 from utils import argparse_filestring_type
screamer 22:9e85236d8716 51 from utils import argparse_many
screamer 24:25bff2709c20 52 from utils import argparse_dir_not_parent
The Other Jimmy 31:8ea194f6145b 53 from tools.toolchains import mbedToolchain, TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS
screamer 22:9e85236d8716 54 from tools.settings import CLI_COLOR_MAP
screamer 0:66f3b5499f7f 55
screamer 0:66f3b5499f7f 56 if __name__ == '__main__':
screamer 0:66f3b5499f7f 57 # Parse Options
The Other Jimmy 31:8ea194f6145b 58 parser = get_default_options_parser(add_app_config=True)
screamer 22:9e85236d8716 59 group = parser.add_mutually_exclusive_group(required=False)
screamer 22:9e85236d8716 60 group.add_argument("-p",
screamer 22:9e85236d8716 61 type=argparse_many(test_known),
screamer 0:66f3b5499f7f 62 dest="program",
screamer 0:66f3b5499f7f 63 help="The index of the desired test program: [0-%d]" % (len(TESTS)-1))
screamer 0:66f3b5499f7f 64
screamer 22:9e85236d8716 65 group.add_argument("-n",
screamer 22:9e85236d8716 66 type=argparse_many(test_name_known),
screamer 22:9e85236d8716 67 dest="program",
screamer 0:66f3b5499f7f 68 help="The name of the desired test program")
screamer 0:66f3b5499f7f 69
screamer 22:9e85236d8716 70 parser.add_argument("-j", "--jobs",
screamer 22:9e85236d8716 71 type=int,
screamer 0:66f3b5499f7f 72 dest="jobs",
screamer 0:66f3b5499f7f 73 default=0,
screamer 0:66f3b5499f7f 74 help="Number of concurrent jobs. Default: 0/auto (based on host machine's number of CPUs)")
screamer 0:66f3b5499f7f 75
screamer 22:9e85236d8716 76 parser.add_argument("-v", "--verbose",
screamer 0:66f3b5499f7f 77 action="store_true",
screamer 0:66f3b5499f7f 78 dest="verbose",
screamer 0:66f3b5499f7f 79 default=False,
screamer 0:66f3b5499f7f 80 help="Verbose diagnostic output")
screamer 0:66f3b5499f7f 81
screamer 22:9e85236d8716 82 parser.add_argument("--silent",
screamer 0:66f3b5499f7f 83 action="store_true",
screamer 0:66f3b5499f7f 84 dest="silent",
screamer 0:66f3b5499f7f 85 default=False,
screamer 0:66f3b5499f7f 86 help="Silent diagnostic output (no copy, compile notification)")
screamer 0:66f3b5499f7f 87
screamer 22:9e85236d8716 88 parser.add_argument("-D",
screamer 0:66f3b5499f7f 89 action="append",
screamer 0:66f3b5499f7f 90 dest="macros",
screamer 0:66f3b5499f7f 91 help="Add a macro definition")
screamer 0:66f3b5499f7f 92
screamer 22:9e85236d8716 93 group.add_argument("-S", "--supported-toolchains",
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 94 action="store_true",
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 95 dest="supported_toolchains",
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 96 default=False,
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 97 help="Displays supported matrix of MCUs and toolchains")
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 98
screamer 22:9e85236d8716 99 parser.add_argument('-f', '--filter',
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 100 dest='general_filter_regex',
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 101 default=None,
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 102 help='For some commands you can use filter to filter out results')
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 103
screamer 0:66f3b5499f7f 104 # Local run
screamer 22:9e85236d8716 105 parser.add_argument("--automated", action="store_true", dest="automated",
screamer 0:66f3b5499f7f 106 default=False, help="Automated test")
screamer 22:9e85236d8716 107 parser.add_argument("--host", dest="host_test",
screamer 0:66f3b5499f7f 108 default=None, help="Host test")
screamer 22:9e85236d8716 109 parser.add_argument("--extra", dest="extra",
screamer 0:66f3b5499f7f 110 default=None, help="Extra files")
screamer 22:9e85236d8716 111 parser.add_argument("--peripherals", dest="peripherals",
screamer 0:66f3b5499f7f 112 default=None, help="Required peripherals")
screamer 22:9e85236d8716 113 parser.add_argument("--dep", dest="dependencies",
screamer 0:66f3b5499f7f 114 default=None, help="Dependencies")
screamer 22:9e85236d8716 115 parser.add_argument("--source", dest="source_dir", type=argparse_filestring_type,
screamer 22:9e85236d8716 116 default=None, help="The source (input) directory", action="append")
screamer 22:9e85236d8716 117 parser.add_argument("--duration", type=int, dest="duration",
screamer 0:66f3b5499f7f 118 default=None, help="Duration of the test")
screamer 24:25bff2709c20 119 parser.add_argument("--build", dest="build_dir", type=argparse_dir_not_parent(ROOT),
screamer 0:66f3b5499f7f 120 default=None, help="The build (output) directory")
screamer 22:9e85236d8716 121 parser.add_argument("-N", "--artifact-name", dest="artifact_name",
screamer 0:66f3b5499f7f 122 default=None, help="The built project's name")
screamer 22:9e85236d8716 123 parser.add_argument("-d", "--disk", dest="disk",
screamer 0:66f3b5499f7f 124 default=None, help="The mbed disk")
screamer 22:9e85236d8716 125 parser.add_argument("-s", "--serial", dest="serial",
screamer 0:66f3b5499f7f 126 default=None, help="The mbed serial port")
screamer 22:9e85236d8716 127 parser.add_argument("-b", "--baud", type=int, dest="baud",
screamer 0:66f3b5499f7f 128 default=None, help="The mbed serial baud rate")
screamer 22:9e85236d8716 129 group.add_argument("-L", "--list-tests", action="store_true", dest="list_tests",
screamer 0:66f3b5499f7f 130 default=False, help="List available tests in order and exit")
screamer 0:66f3b5499f7f 131
screamer 0:66f3b5499f7f 132 # Ideally, all the tests with a single "main" thread can be run with, or
screamer 0:66f3b5499f7f 133 # without the rtos, eth, usb_host, usb, dsp, fat, ublox
screamer 22:9e85236d8716 134 parser.add_argument("--rtos",
screamer 0:66f3b5499f7f 135 action="store_true", dest="rtos",
screamer 0:66f3b5499f7f 136 default=False, help="Link with RTOS library")
screamer 0:66f3b5499f7f 137
screamer 22:9e85236d8716 138 parser.add_argument("--rpc",
screamer 0:66f3b5499f7f 139 action="store_true", dest="rpc",
screamer 0:66f3b5499f7f 140 default=False, help="Link with RPC library")
screamer 0:66f3b5499f7f 141
screamer 22:9e85236d8716 142 parser.add_argument("--eth",
screamer 0:66f3b5499f7f 143 action="store_true", dest="eth",
screamer 0:66f3b5499f7f 144 default=False,
screamer 0:66f3b5499f7f 145 help="Link with Ethernet library")
screamer 0:66f3b5499f7f 146
screamer 22:9e85236d8716 147 parser.add_argument("--usb_host",
screamer 0:66f3b5499f7f 148 action="store_true",
screamer 0:66f3b5499f7f 149 dest="usb_host",
screamer 0:66f3b5499f7f 150 default=False,
screamer 0:66f3b5499f7f 151 help="Link with USB Host library")
screamer 0:66f3b5499f7f 152
screamer 22:9e85236d8716 153 parser.add_argument("--usb",
screamer 0:66f3b5499f7f 154 action="store_true",
screamer 0:66f3b5499f7f 155 dest="usb",
screamer 0:66f3b5499f7f 156 default=False,
screamer 0:66f3b5499f7f 157 help="Link with USB Device library")
screamer 0:66f3b5499f7f 158
screamer 22:9e85236d8716 159 parser.add_argument("--dsp",
screamer 0:66f3b5499f7f 160 action="store_true",
screamer 0:66f3b5499f7f 161 dest="dsp",
screamer 0:66f3b5499f7f 162 default=False,
screamer 0:66f3b5499f7f 163 help="Link with DSP library")
screamer 0:66f3b5499f7f 164
screamer 22:9e85236d8716 165 parser.add_argument("--fat",
screamer 0:66f3b5499f7f 166 action="store_true",
screamer 0:66f3b5499f7f 167 dest="fat",
screamer 0:66f3b5499f7f 168 default=False,
screamer 0:66f3b5499f7f 169 help="Link with FS ad SD card file system library")
screamer 0:66f3b5499f7f 170
screamer 22:9e85236d8716 171 parser.add_argument("--ublox",
screamer 0:66f3b5499f7f 172 action="store_true",
screamer 0:66f3b5499f7f 173 dest="ublox",
screamer 0:66f3b5499f7f 174 default=False,
screamer 0:66f3b5499f7f 175 help="Link with U-Blox library")
screamer 0:66f3b5499f7f 176
screamer 22:9e85236d8716 177 parser.add_argument("--testlib",
screamer 0:66f3b5499f7f 178 action="store_true",
screamer 0:66f3b5499f7f 179 dest="testlib",
screamer 0:66f3b5499f7f 180 default=False,
screamer 0:66f3b5499f7f 181 help="Link with mbed test library")
screamer 0:66f3b5499f7f 182
screamer 0:66f3b5499f7f 183 # Specify a different linker script
screamer 22:9e85236d8716 184 parser.add_argument("-l", "--linker", dest="linker_script",
screamer 22:9e85236d8716 185 type=argparse_filestring_type,
screamer 0:66f3b5499f7f 186 default=None, help="use the specified linker script")
screamer 0:66f3b5499f7f 187
screamer 22:9e85236d8716 188 options = parser.parse_args()
screamer 0:66f3b5499f7f 189
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 190 # Only prints matrix of supported toolchains
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 191 if options.supported_toolchains:
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 192 print mcu_toolchain_matrix(platform_filter=options.general_filter_regex)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 193 exit(0)
Screamer@Y5070-M.virtuoso 9:2d27d77ada5c 194
screamer 0:66f3b5499f7f 195 # Print available tests in order and exit
screamer 0:66f3b5499f7f 196 if options.list_tests is True:
screamer 0:66f3b5499f7f 197 print '\n'.join(map(str, sorted(TEST_MAP.values())))
screamer 0:66f3b5499f7f 198 sys.exit()
screamer 0:66f3b5499f7f 199
screamer 0:66f3b5499f7f 200 # force program to "0" if a source dir is specified
screamer 0:66f3b5499f7f 201 if options.source_dir is not None:
screamer 0:66f3b5499f7f 202 p = 0
screamer 0:66f3b5499f7f 203 else:
screamer 0:66f3b5499f7f 204 # Program Number or name
screamer 22:9e85236d8716 205 p = options.program
screamer 0:66f3b5499f7f 206
screamer 0:66f3b5499f7f 207 # If 'p' was set via -n to list of numbers make this a single element integer list
screamer 0:66f3b5499f7f 208 if type(p) != type([]):
screamer 0:66f3b5499f7f 209 p = [p]
screamer 0:66f3b5499f7f 210
screamer 0:66f3b5499f7f 211 # Target
screamer 0:66f3b5499f7f 212 if options.mcu is None :
The Other Jimmy 31:8ea194f6145b 213 args_error(parser, "argument -m/--mcu is required")
screamer 22:9e85236d8716 214 mcu = options.mcu[0]
screamer 0:66f3b5499f7f 215
screamer 0:66f3b5499f7f 216 # Toolchain
screamer 0:66f3b5499f7f 217 if options.tool is None:
The Other Jimmy 31:8ea194f6145b 218 args_error(parser, "argument -t/--tool is required")
screamer 22:9e85236d8716 219 toolchain = options.tool[0]
screamer 22:9e85236d8716 220
The Other Jimmy 31:8ea194f6145b 221 if (options.program is None) and (not options.source_dir):
The Other Jimmy 31:8ea194f6145b 222 args_error(parser, "one of -p, -n, or --source is required")
The Other Jimmy 31:8ea194f6145b 223
The Other Jimmy 31:8ea194f6145b 224 if options.source_dir and not options.build_dir:
The Other Jimmy 31:8ea194f6145b 225 args_error(parser, "argument --build is required when argument --source is provided")
The Other Jimmy 31:8ea194f6145b 226
The Other Jimmy 31:8ea194f6145b 227
screamer 22:9e85236d8716 228 if options.color:
screamer 22:9e85236d8716 229 # This import happens late to prevent initializing colorization when we don't need it
screamer 22:9e85236d8716 230 import colorize
screamer 22:9e85236d8716 231 if options.verbose:
screamer 22:9e85236d8716 232 notify = mbedToolchain.print_notify_verbose
screamer 22:9e85236d8716 233 else:
screamer 22:9e85236d8716 234 notify = mbedToolchain.print_notify
screamer 22:9e85236d8716 235 notify = colorize.print_in_color_notifier(CLI_COLOR_MAP, notify)
screamer 22:9e85236d8716 236 else:
screamer 22:9e85236d8716 237 notify = None
screamer 0:66f3b5499f7f 238
The Other Jimmy 31:8ea194f6145b 239 if not TOOLCHAIN_CLASSES[toolchain].check_executable():
The Other Jimmy 31:8ea194f6145b 240 search_path = TOOLCHAIN_PATHS[toolchain] or "No path set"
The Other Jimmy 31:8ea194f6145b 241 args_error(parser, "Could not find executable for %s.\n"
The Other Jimmy 31:8ea194f6145b 242 "Currently set search path: %s"
The Other Jimmy 31:8ea194f6145b 243 %(toolchain,search_path))
The Other Jimmy 31:8ea194f6145b 244
screamer 0:66f3b5499f7f 245 # Test
screamer 0:66f3b5499f7f 246 for test_no in p:
screamer 0:66f3b5499f7f 247 test = Test(test_no)
screamer 0:66f3b5499f7f 248 if options.automated is not None: test.automated = options.automated
screamer 0:66f3b5499f7f 249 if options.dependencies is not None: test.dependencies = options.dependencies
screamer 0:66f3b5499f7f 250 if options.host_test is not None: test.host_test = options.host_test;
screamer 0:66f3b5499f7f 251 if options.peripherals is not None: test.peripherals = options.peripherals;
screamer 0:66f3b5499f7f 252 if options.duration is not None: test.duration = options.duration;
screamer 0:66f3b5499f7f 253 if options.extra is not None: test.extra_files = options.extra
screamer 0:66f3b5499f7f 254
screamer 0:66f3b5499f7f 255 if not test.is_supported(mcu, toolchain):
screamer 0:66f3b5499f7f 256 print 'The selected test is not supported on target %s with toolchain %s' % (mcu, toolchain)
screamer 0:66f3b5499f7f 257 sys.exit()
screamer 0:66f3b5499f7f 258
screamer 0:66f3b5499f7f 259 # Linking with extra libraries
screamer 0:66f3b5499f7f 260 if options.rtos: test.dependencies.append(RTOS_LIBRARIES)
screamer 0:66f3b5499f7f 261 if options.rpc: test.dependencies.append(RPC_LIBRARY)
screamer 0:66f3b5499f7f 262 if options.eth: test.dependencies.append(ETH_LIBRARY)
screamer 0:66f3b5499f7f 263 if options.usb_host: test.dependencies.append(USB_HOST_LIBRARIES)
screamer 0:66f3b5499f7f 264 if options.usb: test.dependencies.append(USB_LIBRARIES)
screamer 0:66f3b5499f7f 265 if options.dsp: test.dependencies.append(DSP_LIBRARIES)
screamer 0:66f3b5499f7f 266 if options.fat: test.dependencies.append(FS_LIBRARY)
screamer 0:66f3b5499f7f 267 if options.ublox: test.dependencies.append(UBLOX_LIBRARY)
screamer 0:66f3b5499f7f 268 if options.testlib: test.dependencies.append(TEST_MBED_LIB)
screamer 0:66f3b5499f7f 269
screamer 0:66f3b5499f7f 270 build_dir = join(BUILD_DIR, "test", mcu, toolchain, test.id)
screamer 0:66f3b5499f7f 271 if options.source_dir is not None:
screamer 0:66f3b5499f7f 272 test.source_dir = options.source_dir
screamer 0:66f3b5499f7f 273 build_dir = options.source_dir
screamer 0:66f3b5499f7f 274
screamer 0:66f3b5499f7f 275 if options.build_dir is not None:
screamer 0:66f3b5499f7f 276 build_dir = options.build_dir
screamer 0:66f3b5499f7f 277
screamer 0:66f3b5499f7f 278 try:
The Other Jimmy 31:8ea194f6145b 279 bin_file = build_project(test.source_dir, build_dir, mcu, toolchain,
The Other Jimmy 31:8ea194f6145b 280 test.dependencies,
screamer 0:66f3b5499f7f 281 linker_script=options.linker_script,
screamer 0:66f3b5499f7f 282 clean=options.clean,
screamer 0:66f3b5499f7f 283 verbose=options.verbose,
screamer 22:9e85236d8716 284 notify=notify,
screamer 0:66f3b5499f7f 285 silent=options.silent,
screamer 0:66f3b5499f7f 286 macros=options.macros,
screamer 0:66f3b5499f7f 287 jobs=options.jobs,
The Other Jimmy 31:8ea194f6145b 288 name=options.artifact_name,
The Other Jimmy 31:8ea194f6145b 289 app_config=options.app_config,
The Other Jimmy 31:8ea194f6145b 290 inc_dirs=[dirname(MBED_LIBRARIES)],
The Other Jimmy 31:8ea194f6145b 291 build_profile=extract_profile(parser,
The Other Jimmy 31:8ea194f6145b 292 options,
The Other Jimmy 31:8ea194f6145b 293 toolchain))
screamer 0:66f3b5499f7f 294 print 'Image: %s'% bin_file
screamer 0:66f3b5499f7f 295
screamer 0:66f3b5499f7f 296 if options.disk:
screamer 0:66f3b5499f7f 297 # Simple copy to the mbed disk
screamer 0:66f3b5499f7f 298 copy(bin_file, options.disk)
screamer 0:66f3b5499f7f 299
screamer 0:66f3b5499f7f 300 if options.serial:
screamer 0:66f3b5499f7f 301 # Import pyserial: https://pypi.python.org/pypi/pyserial
screamer 0:66f3b5499f7f 302 from serial import Serial
screamer 0:66f3b5499f7f 303
screamer 13:ab47a20b66f0 304 sleep(TARGET_MAP[mcu].program_cycle_s)
screamer 0:66f3b5499f7f 305
screamer 0:66f3b5499f7f 306 serial = Serial(options.serial, timeout = 1)
screamer 0:66f3b5499f7f 307 if options.baud:
screamer 0:66f3b5499f7f 308 serial.setBaudrate(options.baud)
screamer 0:66f3b5499f7f 309
screamer 0:66f3b5499f7f 310 serial.flushInput()
screamer 0:66f3b5499f7f 311 serial.flushOutput()
screamer 0:66f3b5499f7f 312
screamer 0:66f3b5499f7f 313 try:
screamer 0:66f3b5499f7f 314 serial.sendBreak()
screamer 0:66f3b5499f7f 315 except:
screamer 0:66f3b5499f7f 316 # In linux a termios.error is raised in sendBreak and in setBreak.
screamer 0:66f3b5499f7f 317 # The following setBreak() is needed to release the reset signal on the target mcu.
screamer 0:66f3b5499f7f 318 try:
screamer 0:66f3b5499f7f 319 serial.setBreak(False)
screamer 0:66f3b5499f7f 320 except:
screamer 0:66f3b5499f7f 321 pass
screamer 0:66f3b5499f7f 322
screamer 0:66f3b5499f7f 323 while True:
screamer 0:66f3b5499f7f 324 c = serial.read(512)
screamer 0:66f3b5499f7f 325 sys.stdout.write(c)
screamer 0:66f3b5499f7f 326 sys.stdout.flush()
screamer 0:66f3b5499f7f 327
screamer 0:66f3b5499f7f 328 except KeyboardInterrupt, e:
screamer 0:66f3b5499f7f 329 print "\n[CTRL+c] exit"
The Other Jimmy 31:8ea194f6145b 330 except NotSupportedException, e:
The Other Jimmy 31:8ea194f6145b 331 print "\nNot supported for selected target"
screamer 0:66f3b5499f7f 332 except Exception,e:
screamer 0:66f3b5499f7f 333 if options.verbose:
screamer 0:66f3b5499f7f 334 import traceback
screamer 0:66f3b5499f7f 335 traceback.print_exc(file=sys.stdout)
screamer 0:66f3b5499f7f 336 else:
screamer 0:66f3b5499f7f 337 print "[ERROR] %s" % str(e)
screamer 0:66f3b5499f7f 338
screamer 0:66f3b5499f7f 339 sys.exit(1)