1cef7893435aa41160dd1255c43cb8498279738ccChris Craik#!/usr/bin/env python 2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2015 The Chromium Authors. All rights reserved. 3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be 4cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file. 5cef7893435aa41160dd1255c43cb8498279738ccChris Craik 6cef7893435aa41160dd1255c43cb8498279738ccChris Craik"""Takes a screenshot from an Android device.""" 7cef7893435aa41160dd1255c43cb8498279738ccChris Craik 8cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport argparse 9cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport logging 10cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport os 11cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport sys 12cef7893435aa41160dd1255c43cb8498279738ccChris Craik 13cef7893435aa41160dd1255c43cb8498279738ccChris Craikif __name__ == '__main__': 14cef7893435aa41160dd1255c43cb8498279738ccChris Craik sys.path.append(os.path.abspath(os.path.join( 15cef7893435aa41160dd1255c43cb8498279738ccChris Craik os.path.dirname(__file__), '..', '..', '..'))) 16cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.android import device_utils 17cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.android.tools import script_common 18b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wangfrom devil.utils import logging_common 19cef7893435aa41160dd1255c43cb8498279738ccChris Craik 20ee838d1c4002134ff5af32da272140586c4d31deJohn Recklogger = logging.getLogger(__name__) 21ee838d1c4002134ff5af32da272140586c4d31deJohn Reck 22cef7893435aa41160dd1255c43cb8498279738ccChris Craik 23cef7893435aa41160dd1255c43cb8498279738ccChris Craikdef main(): 24cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Parse options. 25cef7893435aa41160dd1255c43cb8498279738ccChris Craik parser = argparse.ArgumentParser(description=__doc__) 26b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang logging_common.AddLoggingArguments(parser) 27b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang script_common.AddDeviceArguments(parser) 28cef7893435aa41160dd1255c43cb8498279738ccChris Craik parser.add_argument('-f', '--file', metavar='FILE', 29cef7893435aa41160dd1255c43cb8498279738ccChris Craik help='Save result to file instead of generating a ' 30cef7893435aa41160dd1255c43cb8498279738ccChris Craik 'timestamped file name.') 31cef7893435aa41160dd1255c43cb8498279738ccChris Craik parser.add_argument('host_file', nargs='?', 32cef7893435aa41160dd1255c43cb8498279738ccChris Craik help='File to which the screenshot will be saved.') 33cef7893435aa41160dd1255c43cb8498279738ccChris Craik 34cef7893435aa41160dd1255c43cb8498279738ccChris Craik args = parser.parse_args() 35cef7893435aa41160dd1255c43cb8498279738ccChris Craik host_file = args.host_file or args.file 36b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang logging_common.InitializeLogging(args) 37cef7893435aa41160dd1255c43cb8498279738ccChris Craik 38cef7893435aa41160dd1255c43cb8498279738ccChris Craik devices = script_common.GetDevices(args.devices, args.blacklist_file) 39cef7893435aa41160dd1255c43cb8498279738ccChris Craik 40cef7893435aa41160dd1255c43cb8498279738ccChris Craik def screenshot(device): 41cef7893435aa41160dd1255c43cb8498279738ccChris Craik f = None 42cef7893435aa41160dd1255c43cb8498279738ccChris Craik if host_file: 43cef7893435aa41160dd1255c43cb8498279738ccChris Craik root, ext = os.path.splitext(host_file) 44cef7893435aa41160dd1255c43cb8498279738ccChris Craik f = '%s_%s%s' % (root, str(device), ext) 45cef7893435aa41160dd1255c43cb8498279738ccChris Craik f = device.TakeScreenshot(f) 46cef7893435aa41160dd1255c43cb8498279738ccChris Craik print 'Screenshot for device %s written to %s' % ( 47cef7893435aa41160dd1255c43cb8498279738ccChris Craik str(device), os.path.abspath(f)) 48cef7893435aa41160dd1255c43cb8498279738ccChris Craik 49cef7893435aa41160dd1255c43cb8498279738ccChris Craik device_utils.DeviceUtils.parallel(devices).pMap(screenshot) 50cef7893435aa41160dd1255c43cb8498279738ccChris Craik return 0 51cef7893435aa41160dd1255c43cb8498279738ccChris Craik 52cef7893435aa41160dd1255c43cb8498279738ccChris Craik 53cef7893435aa41160dd1255c43cb8498279738ccChris Craikif __name__ == '__main__': 54cef7893435aa41160dd1255c43cb8498279738ccChris Craik sys.exit(main()) 55