gpt4 book ai didi

python - 在 git 中使用 python sh 模块

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:53 25 4
gpt4 key购买 nike

我有以下代码

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>]

我发现这很难解决的主要原因是如果我复制输出命令 -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 提交到本地 repo fine

最佳答案

你需要拆分你的论点。

您的错误消息将显示为(添加引号和换行符):

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"

git 不理解这一点(它将整个字符串作为第一个参数)。

你可以使用shlex拆分你的论点:

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)

这也是the documentation说:

When passing multiple arguments to a command, each argument must be a separate string:

tar("cvf", "/tmp/test.tar", "/my/home/directory/")

This will not work:

tar("cvf /tmp/test.tar /my/home/directory")

注意:在使用 git 时,我更喜欢 gitpython通过 sh

关于python - 在 git 中使用 python sh 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com