Use default OS shell to run system commands

Instead of using os.system which uses /bin/sh, this uses subprocess.call (the replacement of os.system) to run the command using the default shell of the OS. With this, one can use more advanced commands for bash, zsh, ksh, ...

I also edited the docstring, added comments and fixed the handling of return codes.