git和python:使用python中的子进程模块克隆存储库

时间:2013-10-15 10:53:59

标签: python git

我有一个简单的html文件,它接受存储库路径作为参数并将其传递给python cgi脚本,然后使用以下命令克隆存储库..

pr = subprocess.Popen(['/usr/bin/git clone ' + str(repoPath)],
   cwd=os.path.dirname('/clone/here/'),
   stdout=subprocess.PIPE,
   stderr=subprocess.PIPE,
   shell=True)
(out, error) = pr.communicate()
print out
print error

其中,repoPath是其值从html表单中读取的变量。当我执行上面的脚本时,我得到以下错误

致命:无法创建工作树目录'存储库':权限被拒绝

但是当我创建一个python脚本并直接运行上面的命令时,它工作正常。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

该目录已经存在,并且由不同的用户拥有(如果您手动测试,很可能是您的shell登录)。

你在做什么真的不安全。相反,您应该创建一个唯一的目录并在那里克隆。我找到了这个示例tempdir函数。 (注意:如果你不能写$dir

,就有无限循环的风险

这样你就可以避免任何名称冲突。

答案 1 :(得分:0)

应该做的事情如下:

subprocess.Popen(['git', 'clone', str(repoPath), '/clone/here'])

我真的不明白你在那里的cwd声明有什么处理,但是你需要靠近正确的位置,否则cwd可以是任何东西,比如'/'。