我有一个简单的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脚本并直接运行上面的命令时,它工作正常。我在这里错过了什么吗?
答案 0 :(得分:1)
该目录已经存在,并且由不同的用户拥有(如果您手动测试,很可能是您的shell登录)。
你在做什么真的不安全。相反,您应该创建一个唯一的目录并在那里克隆。我找到了这个示例tempdir函数。 (注意:如果你不能写$dir
)
这样你就可以避免任何名称冲突。
答案 1 :(得分:0)
应该做的事情如下:
subprocess.Popen(['git', 'clone', str(repoPath), '/clone/here'])
我真的不明白你在那里的cwd声明有什么处理,但是你需要靠近正确的位置,否则cwd可以是任何东西,比如'/'。