«Fatal: слишком много параметров» при вызове команды bash из python, без ошибок при использовании этой же команды непосредственно в git bash - PullRequest
0 голосов
/ 16 февраля 2019

Расширяя ранее работавшую функцию, я столкнулся с проблемой с частью $ (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)

1 Ответ

0 голосов
/ 16 февраля 2019

Здесь нет причин использовать оболочку.Используйте форму списка для первого аргумента call.Обратите внимание, что для этого потребуется изменить body, но это сделает его проще .

body = """\
==New Features==
still not working

==Bugfixes==
0 bugs fixed

==Known Issues==
infinite amounts of bugs left"""

commit_msg = "heading\n\n" + body
version_str = '.'.join(['v', str(major), str(minor), str(bugfix)]),

git_cmd = [
    'git', 
    'tag',
    '-a',
    version_str,
    '-m',
    commit_msg
]


subprocess.call(git_cmd)
...