Você certamente pode fazer tudo usando o material interno do Python de os e submpra módulos.
Uma coisa um pouco complicada seria se você quer que o seu script "interaja" com os programas que você está invocando (como "espere até que ele imprima 'pressione Enter para continuar", então envie um pressionamento de tecla Enter). pode usar o módulo pexpect .
Para um modo de nível mais alto, dê uma olhada na biblioteca Fabric - além de executar comandos locais, ele também permitirá que você execute facilmente código em máquinas remotas via SSH.
Uma pequena amostra de código usando o Fabric:
if "dirty" in api.local("git describe --dirty", capture=True):
print colors.red("""Your repository is dirty, commit any changes first""")
sys.exit(1)
Lê quase como poesia :) Código semelhante no Bash pareceria uma bagunça ininteligível em comparação ...