diff --git a/fs_uae_wrapper/base.py b/fs_uae_wrapper/base.py index a33cf57..9c37058 100644 --- a/fs_uae_wrapper/base.py +++ b/fs_uae_wrapper/base.py @@ -1,9 +1,10 @@ """ Base class for all wrapper modules """ +import logging import os -import sys import shutil +import sys import tempfile from fs_uae_wrapper import utils @@ -117,7 +118,7 @@ class Base(object): curdir = os.path.abspath('.') if not utils.create_archive(self.save_filename, '', [save_path]): - sys.stderr.write('Error: archiving save state failed\n') + logging.error('Error: archiving save state failed.') os.chdir(curdir) return False @@ -219,21 +220,20 @@ class Base(object): def _validate_options(self): """Validate mandatory options""" if 'wrapper' not in self.all_options: - sys.stderr.write("Configuration lacks of required " - "`wrapper' option.\n") + logging.error("Configuration lacks of required `wrapper' option.") return False if self.all_options.get('wrapper_save_state', '0') == '0': return True if 'wrapper_archiver' not in self.all_options: - sys.stderr.write("Configuration lacks of required " - "`wrapper_archiver' option.\n") + logging.error("Configuration lacks of required " + "`wrapper_archiver' option.") return False if not path.which(self.all_options['wrapper_archiver']): - sys.stderr.write("Cannot find archiver `%s'." % - self.all_options['wrapper_archiver']) + logging.error("Cannot find archiver `%s'.", + self.all_options['wrapper_archiver']) return False return True diff --git a/fs_uae_wrapper/file_archive.py b/fs_uae_wrapper/file_archive.py index 03533e4..ec0375e 100644 --- a/fs_uae_wrapper/file_archive.py +++ b/fs_uae_wrapper/file_archive.py @@ -3,8 +3,8 @@ File archive classes """ import os import subprocess -import sys import re +import logging from fs_uae_wrapper import path @@ -25,10 +25,12 @@ class Archive(object): Create archive. Return True on success, False otherwise. """ files = files if files else ['.'] + logging.debug("Calling `%s %s %s %s'.", self._compress, + " ".join(self.ADD), arch_name, " ".join(files)) result = subprocess.call([self._compress] + self.ADD + [arch_name] + files) if result != 0: - sys.stderr.write("Unable to create archive `%s'\n" % arch_name) + logging.error("Unable to create archive `%s'.", arch_name) return False return True @@ -37,13 +39,15 @@ class Archive(object): Extract archive. Return True on success, False otherwise. """ if not os.path.exists(arch_name): - sys.stderr.write("Archive `%s' doesn't exists.\n" % arch_name) + logging.error("Archive `%s' doesn't exists.", arch_name) return False + logging.debug("Calling `%s %s %s'.", self._compress, + " ".join(self.ADD), arch_name) result = subprocess.call([self._decompress] + self.EXTRACT + [arch_name]) if result != 0: - sys.stderr.write("Unable to extract archive `%s'\n" % arch_name) + logging.error("Unable to extract archive `%s'.", arch_name) return False return True @@ -55,10 +59,12 @@ class TarArchive(Archive): def create(self, arch_name, files=None): files = files if files else sorted(os.listdir('.')) + logging.debug("Calling `%s %s %s %s'.", self._compress, + " ".join(self.ADD), arch_name, " ".join(files)) result = subprocess.call([self._compress] + self.ADD + [arch_name] + files) if result != 0: - sys.stderr.write("Unable to create archive `%s'\n" % arch_name) + logging.error("Unable to create archive `%s'.", arch_name) return False return True @@ -101,8 +107,8 @@ class LzxArchive(Archive): @classmethod def create(self, arch_name, files=None): - sys.stderr.write('Cannot create LZX archive. Only extracting is' - 'supported\n') + logging.error('Cannot create LZX archive. Only extracting is' + 'supported.') return False @@ -112,14 +118,16 @@ class RarArchive(Archive): def create(self, arch_name, files=None): files = files if files else sorted(os.listdir('.')) if self.archiver == 'unrar': - sys.stderr.write('Cannot create RAR archive. Only extracting is' - 'supported by unrar.\n') + logging.error('Cannot create RAR archive. Only extracting is' + 'supported by unrar.') return False + logging.debug("Calling `%s %s %s %s'.", self._compress, + " ".join(self.ADD), arch_name, " ".join(files)) result = subprocess.call([self._compress] + self.ADD + [arch_name] + files) if result != 0: - sys.stderr.write("Unable to create archive `%s'\n" % arch_name) + logging.error("Unable to create archive `%s'.", arch_name) return False return True @@ -174,13 +182,13 @@ def get_archiver(arch_name): archiver = Archivers.get(ext) if not archiver: - sys.stderr.write("Unable find archive type for `%s'\n" % arch_name) + logging.error("Unable find archive type for `%s'.", arch_name) return None archobj = archiver() if archobj.archiver is None: - sys.stderr.write("Unable find executable for operating on files" - " `*%s'\n" % ext) + logging.error("Unable find executable for operating on files `*%s'.", + ext) return None return archobj diff --git a/fs_uae_wrapper/utils.py b/fs_uae_wrapper/utils.py index db5e0d6..812804a 100644 --- a/fs_uae_wrapper/utils.py +++ b/fs_uae_wrapper/utils.py @@ -2,9 +2,9 @@ Misc utilities """ from distutils import spawn +import logging import os import subprocess -import sys try: import configparser except ImportError: @@ -115,10 +115,10 @@ def run_command(cmd): if not isinstance(cmd, list): cmd = cmd.split() + logging.debug("Executing `%s'.", " ".join(cmd)) code = subprocess.call(cmd) if code != 0: - sys.stderr.write('Command `{0}` returned non 0 exit ' - 'code\n'.format(cmd[0])) + logging.error('Command `%s` returned non 0 exit code.', cmd[0]) return False return True diff --git a/fs_uae_wrapper/wrapper.py b/fs_uae_wrapper/wrapper.py index 514c292..2736e94 100644 --- a/fs_uae_wrapper/wrapper.py +++ b/fs_uae_wrapper/wrapper.py @@ -62,7 +62,7 @@ def parse_args(): def usage(): """Print help""" - sys.stdout.write("Usage: %s [conf-file] [fs-uae-option...]\n\n" + sys.stdout.write("Usage: %s [conf-file] [-v] [-q] [fs-uae-option...]\n\n" % sys.argv[0]) sys.stdout.write("Config file is not required, if `Config.fs-uae' " "exists in the current\ndirectory, although it might " @@ -85,14 +85,14 @@ def run(): sys.exit(0) if not config_file: - sys.stderr.write('Error: Configuration file not found\nSee --help' - ' for usage\n') + logging.error('Error: Configuration file not found. See --help' + ' for usage') sys.exit(1) configuration = utils.get_config_options(config_file) if configuration is None: - sys.stderr.write('Error: Configuration file have syntax issues\n') + logging.error('Error: Configuration file have syntax issues') sys.exit(2) wrapper_module = fsuae_options.get(WRAPPER_KEY) @@ -106,8 +106,8 @@ def run(): wrapper = importlib.import_module('fs_uae_wrapper.' + wrapper_module) except ImportError: - sys.stderr.write("Error: provided wrapper module: `%s' doesn't " - "exists.\n" % wrapper_module) + logging.error("Error: provided wrapper module: `%s' doesn't " + "exists.", wrapper_module) sys.exit(3) runner = wrapper.Wrapper(config_file, fsuae_options, configuration)