为什么在subprocess.check_output(['cmd','arg'])期间调用CalledProcessError

时间:2013-06-12 12:19:13

标签: python django subprocess

我用Apache + mod_wsgi托管的django项目。我试图通过子进程使用git命令来提取更新,如:

subprocess.check_output(['git', 'pull', 'origin', 'mybranch']) 

然而,我收到的错误如下:

Command '['git', 'pull', 'origin', 'mybranch']' returned non-zero exit status 128

当我通过浏览器调用此功能时,会出现此问题。如果我从python sell运行subprocess.check_output(['git', 'pull', 'origin', 'mybranch']),则不会出错。它按预期完美地工作。

2 个答案:

答案 0 :(得分:1)

我用git grep两次遇到同样的问题。

这是我第二次忘记将www-data添加到对git存储库文件夹具有读权限的组中。

另外,由于git命令需要从git repo中运行,你可能想尝试在你的参数列表中添加'--git-dir=''--work-tree=',就在git main命令之后:

   gd = '--git-dir=' + os.path.join(repo_path, '.git')
   wt = '--work-tree=' + repo_path
   gg_matches = subprocess.check_output(["git", gd, wt, "grep"] + gg_opt)

如果你的cwd与你的repo_path不同,那就是必需的。

答案 1 :(得分:0)

我无法重现这个,因为该命令对我来说也适用于shell,但添加shell = True可能会在Apache + mod_wsgi下运行时修复它