在git中使用pythonsh模块
我有以下代码在git中使用pythonsh模块,python,git,Python,Git,我有以下代码 import urllib2 import unicodedata from sh import git repo_name = "bitbucket.org/foo/foo.git" repo_dir = "/home/foo/code" user = "foo" pwd = "foo" git = git.bake(_tty_out=False, _cwd=repo_dir) for file_name in git.diff('--name-only'): fil
import urllib2
import unicodedata
from sh import git
repo_name = "bitbucket.org/foo/foo.git"
repo_dir = "/home/foo/code"
user = "foo"
pwd = "foo"
git = git.bake(_tty_out=False, _cwd=repo_dir)
for file_name in git.diff('--name-only'):
file_name_str=file_name.encode('ascii','ignore')
file_name_str=file_name_str.strip()
git("-c user.name=foo -c user.email='foo@bitbacket.org' commit -m 'no comments' group_vars/git_vars.yml")
这给了我以下错误:
sh.ErrorReturnCode_129:
RAN: /usr/bin/git -c user.name=awsAnsibleViju -c user.email='awsAnsibleViju@bitbacket.org' commit -m 'no comments' /home/r_ansible/playbooks/group_vars/git_vars.yml
STDOUT:
STDERR:
Unknown option: -c user.name=awsAnsibleViju -c user.email='awsAnsibleViju@bitbacket.org' commit -m 'no comments' /home/r_ansible/playbooks/group_vars/git_vars.yml
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
sh.ErrorReturnCode_129:
RAN:/usr/bin/git-c user.name=awsAnsibleViju-c user.email=awsAnsibleViju@bitbacket.org'commit-m'no comments'/home/r_ansible/playbooks/group_vars/git_vars.yml
标准:
标准:
未知选项:-c user.name=awsAnsibleViju-c user.email=awsAnsibleViju@bitbacket.org'commit-m'no comments'/home/r_ansible/playbooks/group_vars/git_vars.yml
用法:git[--version][--help][-C][-C name=value]
[--exec path[=][--html path][--man path][--info path]
[-p |--paginate |--无寻呼机][--无替换对象][--bare]
[--git dir=][--work tree=][--namespace=]
[]
我发现这个问题很难解决的主要原因是,如果我复制输出命令
-c user.name=foo-c user.email=foo@bitbacket.org“commit-m”no comments“group_vars/git_vars.yml
到终端,并在其前面添加$git
,文件group_vars/git_vars.yml
被提交到本地回购很好您需要拆分您的参数
您的错误消息如下(添加了引号和换行符):
而git
不理解这一点(它将整个字符串作为第一个参数)
您可以使用拆分参数:
import shlex
args = shlex.split(("-c user.name=foo -c user.email='foo@bitbacket.org'"
" commit -m 'no comments' group_vars/git_vars.yml"))
# ['-c', 'user.name=foo', '-c', 'user.email=foo@bitbacket.org', 'commit',
# '-m', 'no comments', 'group_vars/git_vars.yml']
把它当作
git(args) # or: git(*args)
也就是说:
向命令传递多个参数时,每个参数必须是单独的字符串:
tar(“cvf”、“tmp/test.tar”、“my/home/directory/”)
这是行不通的:
tar(“cvf/tmp/test.tar/my/home/directory”)
注意:当使用
git
时,我更喜欢sh
您需要拆分参数
您的错误消息如下(添加了引号和换行符):
而git
不理解这一点(它将整个字符串作为第一个参数)
您可以使用拆分参数:
import shlex
args = shlex.split(("-c user.name=foo -c user.email='foo@bitbacket.org'"
" commit -m 'no comments' group_vars/git_vars.yml"))
# ['-c', 'user.name=foo', '-c', 'user.email=foo@bitbacket.org', 'commit',
# '-m', 'no comments', 'group_vars/git_vars.yml']
把它当作
git(args) # or: git(*args)
也就是说:
向命令传递多个参数时,每个参数必须是单独的字符串:
tar(“cvf”、“tmp/test.tar”、“my/home/directory/”)
这是行不通的:
tar(“cvf/tmp/test.tar/my/home/directory”)
注意:当使用
git
时,我更喜欢sh
可能您在终端中使用的是其他版本,而不是脚本?很抱歉,我的原始版本不是100%准确。我应该声明我使用了与sh模块完全相同的命令,并且我不添加git。因此,我在终端中使用的命令是/usr/bin/git-c user.name=foo-c user.email=foo@bitbacket.org“commit-m‘no comments’group_vars/git_vars.yml
因此应该是相同的git/usr/bin/git/
您是否尝试过我尝试过的方法,但我无法理解它的API或它提供的文档。也许您正在使用其他版本终端比你的脚本中的要多?很抱歉,我的原稿不是100%准确。我应该声明我使用了与sh模块完全相同的命令,并且我不添加git。因此,我在终端中使用的命令是/usr/bin/git-c user.name=foo-c user.email=foo@bitbacket.org“commit-m‘no comments’group_vars/git_vars.yml
因此应该是相同的git/usr/bin/git/
您是否尝试过我尝试过的方法,但我无法理解它提供的API或文档。感谢提供的解决方案和同样重要的是,清楚的解释和相关文档的链接。我曾尝试使用gitpython
,但我发现它的API和文档不可理解(我确信这是由我决定的)@alexis我不得不承认,我从gitpython
开始很难理解自己!感谢提供的解决方案,同样重要的是清晰的解释和相关文档的链接。我曾尝试使用gitpython
,但我发现它的API和文档不可理解(我确信这是由我决定的)@alexis我不得不承认,我从gitpython
开始很难理解自己!