Source code for plaso.scripts.image_export

#!/usr/bin/env python3
"""The image export command line tool."""

import logging
import multiprocessing
import os
import sys

from plaso import dependencies
from plaso.cli import image_export_tool
from plaso.lib import errors


[docs] def Main(): """Entry point of console script to extract files from images. Returns: int: exit code that is provided to sys.exit(). """ tool = image_export_tool.ImageExportTool() if not tool.ParseArguments(sys.argv[1:]): return 1 if tool.show_troubleshooting: path = os.path.abspath(__file__) print(f"Using Python version {sys.version!s}") print() print(f"Path: {path!s}") print() print(tool.GetVersionInformation()) print() dependencies.CheckDependencies(verbose_output=True) print( "Also see: https://plaso.readthedocs.io/en/latest/sources/user/" "Troubleshooting.html" ) return 0 try: tool.CheckOutDated() except KeyboardInterrupt: return 1 if tool.list_signature_identifiers: try: tool.ListSignatureIdentifiers() # BadConfigOption will be raised if signatures.conf cannot be found. except errors.BadConfigOption as exception: logging.warning(exception) return 1 return 0 if not tool.has_filters: logging.warning("No filter defined exporting all files.") # TODO: print more status information like PrintOptions. tool.PrintFilterCollection() try: tool.ProcessSource() # Writing to stdout and stderr will raise BrokenPipeError if it receives a # SIGPIPE. except BrokenPipeError: pass except (KeyboardInterrupt, errors.UserAbort): logging.warning("Aborted by user.") return 1 except errors.BadConfigOption as exception: logging.warning(exception) return 1 except errors.SourceScannerError as exception: logging.warning( f"Unable to scan for a supported file system with error: " f"{exception!s}\nMost likely the image format is not supported." ) return 1 return 0
if __name__ == "__main__": multiprocessing.freeze_support() sys.exit(Main())