Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git中使用pythonsh模块_Python_Git - Fatal编程技术网

在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
开始很难理解自己!