Расширяя ранее работавшую функцию, я столкнулся с проблемой с частью $ (echo -e "...") - subprocess.call возвращает "fatal: too many params".
Еслия копирую напечатанный bashCmd и вставляю его непосредственно в Git Bash, в результате получаю ожидаемый результат (новый тег, созданный с заголовком, и некоторое форматированное представление «тела» тега; «новые функции: ... \ n исправления ошибок»).: ... \ n "и т. д.
Печатная строка bashCmd, переданная в качестве аргумента для subprocess.call: git tag -a v1.4.9 -m "new tag description" -m"$(echo -e "==New Features==\n no new features\n but feature 1\n and feature 2\n==Bugfixes==\n fixed whitespace\n hopefully it works\n==Known Issues==\n No Known Issues Reported.\n")"
bashCmd = 'git tag -a v' + str(major) + '.' + str(minor) + '.' + str(bugfix) +' -m'+ ''' "''' + heading + '''" '''+'-m'+ '''"$(echo -e'''+ ''' "''' +body+'''"''' ''')"'''
subprocess.call(bashCmd, shell=True)
print(bashCmd)