在扩展以前工作的功能时,我遇到了$(echo -e“ ...”)-部分subprocess.call返回“致命:太多参数”的问题。
如果我复制打印的bashCmd并将其直接粘贴到Git Bash中,则会得到预期的结果(带有标题的新标签以及该标签的“ body”的一些格式表示;“新功能:.. 。\ 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)
答案 0 :(得分:2)
这里没有理由使用外壳。对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)