2014-05-04 70 views
0

我写了一个python cgi脚本,它接收书籍文件+ html表单中的一些文本。 脚本保存文件没有问题(在临时目录中:/ opt/bibliotecha/tmp_bookcase /),但是我试图使用calibredb工具将它添加到口径库,但我没有成功。calibredb添加书籍 - 通过cgi脚本

我将有问题的部分分离到以下脚本中;

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import cgi 
import cgitb; cgitb.enable() 

print "Content-type: text/html" 
print 

import os, subprocess 
tmp_upload_path = "/opt/bibliotecha/tmp_bookcase/" 
tmp_path_book = tmp_upload_path + "Vila-Matas,Enrique-Dublinesque(NewDirections,2012).epubVila-Matas,Enrique-Dublinesque(NewDirections,2012).epub" 

subprocess.call(["calibredb", "add", tmp_path_book]) 

如果我从终端调用脚本,它会完成应有的操作。

如果我调用脚本从浏览器中,我得到以下信息:

No write acces to /var/www/.config/calibre using a temporary dir instead 

我认为错误可能与以下事实:当脚本从浏览器,它的用户称为不同的做用户和组。但口径怎么不会抱怨呢?

我发现,似乎解决了同样的问题 https://bugs.launchpad.net/calibre/+bug/1299635 线程和他们提到环境上运行的是不必在PHP中的相同(在他们的情况),在控制台口径。

但我真的没有得到口径的环境,从来没有听说过它。

任何提示? :d

一个

回答

0

首先看看谁拥有的目录和权限当前的用户会对目录。

这可以通过使用ls -l来完成。一旦你确定了这个,你可以使用chmod来允许你的用户写入这个目录。

如果由于某种原因,你真的需要使用特定的用户运行的实际写命令时,再看看这个帖子的回答是:

Run child processes as different user from a long running process