Source code for autokey.scripting.system

# Copyright (C) 2011 Chris Dekter
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""Provides access to run system commands through C{subprocess} and basic file creation"""

import subprocess


[docs]class System: """ Simplified access to some system commands. """
[docs] @staticmethod def exec_command(command, getOutput=True): """ Execute a shell command Usage: C{system.exec_command(command, getOutput=True)} Set getOutput to False if the command does not exit and return immediately. Otherwise AutoKey will not respond to any hotkeys/abbreviations etc until the process started by the command exits. @param command: command to be executed (including any arguments) - e.g. "ls -l" @param getOutput: whether to capture the (stdout) output of the command @raise subprocess.CalledProcessError: if the command returns a non-zero exit code """ if getOutput: with subprocess.Popen( command, shell=True, bufsize=-1, stdout=subprocess.PIPE, universal_newlines=True) as p: output = p.communicate()[0] # Most shell output has a new line at the end, which we don't want. output = output.rstrip("\n") if p.returncode: raise subprocess.CalledProcessError(p.returncode, output) return output else: subprocess.Popen(command, shell=True, bufsize=-1)
[docs] @staticmethod def create_file(file_name, contents=""): """ Create a file with contents Usage: C{system.create_file(fileName, contents="")} @param fileName: full path to the file to be created @param contents: contents to insert into the file """ with open(file_name, "w") as written_file: written_file.write(contents)