2014-05-04 67 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