All Versions
Latest Version
Avg Release Cycle
113 days
Latest Release

Changelog History
Page 3

  • v1.10 Changes

    • partially applied functions with functools.partial have been fixed for _out and _err callbacks #160
    • _out or _err being callables no longer puts the running command in the background. to achieve the previous behavior, pass _bg=True to your command.
    • ๐Ÿ—„ deprecated _with contexts #195
    • โฑ _timeout_signal allows you to specify your own signal to kill a timed-out process with. use a constant from the signal stdlib module. #171
    • ๐Ÿšฆ signal exceptions can now be caught by number or name. SignalException_9 == SignalException_SIGKILL
    • ๐Ÿšฆ child processes that timeout via _timeout raise sh.TimeoutException instead of sh.SignalExeception_9 #172
    • ๐Ÿ›  fixed help(sh) from the python shell and pydoc sh from the command line. #173
    • ๐Ÿšš program names can no longer be shadowed by names that defines internally. removed the requirement of trailing underscores for programs that could have their names shadowed, like id.
    • memory optimization when a child process's stdin is a newline-delimted string and our bufsize is newlines
    • feature, _done special keyword argument that accepts a callback to be called when the command completes successfully #185
    • ๐Ÿ›  bugfix for being unable to print a baked command in python3+ #176
    • ๐Ÿ›  bugfix for cwd not existing and causing the child process to continue running parent process code #202
    • ๐Ÿ‘ป child process is now guaranteed to exit on exception between fork and exec.
    • ๐Ÿ—„ fix python2 deprecation warning when running with -3 PR #165
    • ๐Ÿ›  bugfix where was attempting to execute directories #196, PR #189
    • only backgrounded processes will ignore SIGHUP
    • allowed ok_code to take a range object. #PR 210
    • 0๏ธโƒฃ added sh.args with context which allows overriding of all command defaults for the duration of that context.
    • added sh.pushd with context which takes a directory name and changes to that directory for the duration of that with context. PR #206
    • โœ… tests now include python 3.4 if available. tests also stop on the first python that suite that fails.
    • ๐Ÿšฆ SIGABRT, SIGBUS, SIGFPE, SIGILL, SIGPIPE, SIGSYS have been added to the list of signals that throw an exception PR #201
    • "callable" builtin has been faked for python3.1, which lacks it.
    • "direct" option added to _piped special keyword argument, which allows sh to hand off a process's stdout fd directly to another process, instead of buffering its stdout internally, then handing it off. #119
  • v1.09 Changes

    • ๐Ÿ›  Fixed encoding errors related to a system encoding "ascii". #123
    • ๐Ÿšฆ Added exit_code attribute to SignalException and ErrorReturnCode exception classes. #127
    • 0๏ธโƒฃ Making the default behavior of spawned processes to not be explicitly killed when the parent python process ends. Also making the spawned process ignore SIGHUP. #139
    • Made OSX sleep hack to apply to PY2 as well as PY3.
  • v1.08 Changes

    • Added SignalException class and made all commands that end terminate by a signal defined in SIGNALS_THAT_SHOULD_THROW_EXCEPTION raise it. #91
    • ๐Ÿ›  Bugfix where CommandNotFound was not being raised if Command was created by instantiation. #113
    • ๐Ÿ›  Bugfix for Commands that are wrapped with functools.wraps() [#121](]
    • ๐Ÿ›  Bugfix where input arguments were being assumed as ascii or unicode, but never as a string in a different encoding.
    • _long_sep keyword argument added joining together a dictionary of arguments passed in to a command
    • Commands can now be passed a dictionary of args, and the keys will be interpretted "raw", with no underscore-to-hyphen conversion
    • Reserved Python keywords can now be used as subcommands by appending an underscore _ to them
  • v1.07 Changes

    • ๐Ÿ›  Bugfix for PyDev when locale.getpreferredencoding() is empty.
    • ๐Ÿ›  Fixes for IPython3 that involve sh.<tab> and sh?
    • Added _tee special keyword argument to force stdout/stderr to store internally and make available for piping data that is being redirected.
    • Added _decode_errors to be passed to all stdout/stderr decoding of a process.
    • Added _no_out, _no_err, and _no_pipe special keyword arguments. These are used for long-running processes with lots of output.
    • ๐Ÿ›  Changed custom loggers that were created for each process to fixed loggers, so there are no longer logger references laying around in the logging module after the process ends and it garbage collected.
  • v1.06 Changes

    • ๐Ÿšš Removed old undocumented cruft of ARG1..ARGN and ARGV.
    • ๐Ÿ›  Bugfix where logging_enabled could not be set from the importing module.
    • Disabled garbage collection before fork to prevent garbage collection in child process.
    • ๐Ÿ›  Major bugfix where cyclical references were preventing process objects (and their associated stdout/stderr buffers) from being garbage collected.
    • ๐Ÿ›  Bugfix in RunningCommand and OProc loggers, which could get really huge if a command was called that had a large number of arguments.
  • v1.05 Changes

    • Changing status from alpha to beta.
    • ๐Ÿ‘ Python 3.3 officially supported.
    • ๐Ÿ“š Documentation fix. The section on exceptions now references the fact that signals do not raise an exception, even for signals that might seem like they should, e.g. segfault.
    • Bugfix with Python 3.3 where importing commands from the sh namespace resulted in an error related to __path__
    • Long-form and short-form options to commands may now be given False to disable the option from being passed into the command. This is useful to pass in a boolean flag that you flip to either True or False to enable or disable some functionality at runtime.
  • v1.04 Changes

    • 0๏ธโƒฃ Making Command class resolve the path parameter with which by default instead of expecting it to be resolved before it is passed in. This change shouldn't affect backwards compatibility.
    • 0๏ธโƒฃ Fixing a bug when an exception is raised from a program, and the error output has non-ascii text. This didn't work in Python < 3.0, because .decode()'s default encoding is typically ascii.