# `gbp.command_wrappers.Command(object)` class documentation

Part of `gbp.command_wrappers` (View In Hierarchy)

Known subclasses: gbp.command_wrappers.CatenateTarArchive, gbp.command_wrappers.CatenateZipArchive, gbp.command_wrappers.DpkgSourceExtract, gbp.command_wrappers.GitCommand, gbp.command_wrappers.PackTarArchive, gbp.command_wrappers.RemoveTree, gbp.command_wrappers.RunAtCommand, gbp.command_wrappers.UnpackTarArchive, gbp.command_wrappers.UnpackZipArchive, gbp.deb.DpkgCompareVersions, gbp.pkg.pristinetar.PristineTar

Wraps a shell command, so we don't have to store any kind of command line options in one of the git-buildpackage commands

Note that it does not do any shell quoting even with shell=True so you have to quote arguments yourself if necessary.

If cmd doesn't contain a path component it will be looked up in $PATH.

Method | __init__ | Undocumented
Method | __call__ | Run the command and raise exception on errors
Method | call | Like `__call__` but let the caller handle the return status.
Static Method | _f | Build error string template
Method | _reset_state | Undocumented
Method | __call | Wraps subprocess.call so we can be verbose and fix Python's SIGPIPE handling
Method | _log_err | Log an error message
Method | _format_err | Log an error message

def __init__(self, cmd, args=[], shell=False, extra_env=None, cwd=None, capture_stderr=False, capture_stdout=False):
overridden in gbp.command_wrappers.CatenateTarArchive, gbp.command_wrappers.CatenateZipArchive, gbp.command_wrappers.DpkgSourceExtract, gbp.command_wrappers.GitCommand, gbp.command_wrappers.PackTarArchive, gbp.command_wrappers.RemoveTree, gbp.command_wrappers.UnpackTarArchive, gbp.command_wrappers.UnpackZipArchive, gbp.deb.DpkgCompareVersions, gbp.pkg.pristinetar.PristineTar, gbp.scripts.common.hook.Hook
Undocumented
@staticmethod
def _f(format, *args):

Build error string template

'%' expansion is performed while curly braces in args are quoted so we don't accidentally try to expand them when printing an error message later that uses one of our predefined error variables stdout, stderr, stderr_or_reason and self.err_reason.

    >>> Command._f("foo %s", "bar")
    'foo bar'
    >>> Command._f("{foo} %s %s", "bar", "baz")
    '{foo} bar baz'
    >>> Command._f("{foo} bar")
    '{foo} bar'

def _reset_state(self):
Undocumented
def __call(self, args):

Wraps subprocess.call so we can be verbose and fix Python's SIGPIPE handling

def _log_err(self):

Log an error message

def _format_err(self):

Log an error message

This allows to replace stdout, stderr and err_reason in the self.run_error.

def __call__(self, args=[], quiet=False):
overridden in gbp.command_wrappers.CatenateTarArchive, gbp.command_wrappers.CatenateZipArchive, gbp.command_wrappers.DpkgSourceExtract, gbp.command_wrappers.RunAtCommand, gbp.deb.DpkgCompareVersions

Run the command and raise exception on errors

If run quietly it will not print an error message via the `gbp.log` logging API.

Whether the command prints anything to stdout/stderr depends on the capture_stderr, capture_stdout instance variables.

All errors will be reported as subclass of the `CommandExecFailed` exception including a non zero exit status of the run command.

Parameters | args | additional command line arguments (type: `list` of `strings`)

quiet

don't log failed execution to stderr. Mostly useful during unit testing (type: `bool`

    >>> Command("/bin/true")(["foo", "bar"])
    >>> Command("/foo/bar")(quiet=True) # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    gbp.command_wrappers.CommandExecFailed

)

def call(self, args, quiet=True):

Like `__call__` but let the caller handle the return status.

Only raise `CommandExecFailed` if we failed to launch the command at all (i.e. if it does not exist) not if the command returned nonzero.

Logs errors using `gbp.log` by default.

Parameters | args | additional command line arguments (type: `list` of `strings`)
| quiet | don't log failed execution to stderr. Mostly useful during unit testing (type: `bool`)

Returns

the exit status of the run command (type: `int`

    >>> Command("/bin/true").call(["foo", "bar"])
    0
    >>> Command("/foo/bar").call(["foo", "bar"]) # doctest:+ELLIPSIS
    Traceback (most recent call last):
    ...
    gbp.command_wrappers.CommandExecFailed: execution failed: ...
    >>> c = Command("/bin/true", capture_stdout=True,
    ...             extra_env={'LC_ALL': 'C'})
    >>> c.call(["--version"])
    0
    >>> c.stdout.startswith('true')
    True
    >>> c = Command("/bin/false", capture_stdout=True,
    ...             extra_env={'LC_ALL': 'C'})
    >>> c.call(["--help"])
    1
    >>> c.stdout.startswith('Usage:')
    True

)