【问题标题】:calibredb add book - via cgi scriptcalibredb 添加书籍 - 通过 cgi 脚本
【发布时间】:2014-05-04 15:12:52
【问题描述】:

我编写了一个 python cgi 脚本,它接收书籍文件 + 来自 html 表单的一些文本。 脚本可以毫无问题地保存文件(在临时目录中:/opt/bibliotecha/tmp_bookcase/),但是我正在尝试使用 calibredb 工具将其添加到 calibre 库,但我没有成功。

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

#!/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

我认为该错误可能与从浏览器调用脚本时使用不同的用户和组这一事实有关。但是 calibre 怎么可能不抱怨呢?

我找到了一个似乎解决相同问题的线程 https://bugs.launchpad.net/calibre/+bug/1299635 他们提到运行口径的环境必须在php(在他们的情况下)和控制台中相同。

但我并不真正了解 calibre 环境,从未听说过。

有什么提示吗?? :D

一个

【问题讨论】:

    标签: python cgi calibre


    【解决方案1】:

    首先看看谁拥有该目录以及您当前的用户将对该目录拥有哪些权限。

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

    如果由于某种原因您在运行实际写入命令时确实需要使用特定用户,请查看这篇文章的答案:

    Run child processes as different user from a long running process

    【讨论】:

      【解决方案2】:

      我成功地使用了这种方法一段时间,但在某些时候它完全停止工作,因为 Calibre 已更改为不再允许多个程序写入其数据库(可能是为了防止损坏)。

      你现在(2021 年)需要做什么:

      配置并启动服务器。转到“首选项-> 共享-> 通过网络共享”。您需要[启动]服务器,并且可能选择“自动运行服务器”。

      您需要记下端口号,或者您可以动态扫描文件~/.config/calibre/server-config.txt。查找# The port on which to listen for connections 行,然后下一行应该是port NNNN,其中NNNN 是端口号。如果找不到这些行,则在 GUI 中选择了默认端口 (NNNN=8080)。

      要添加一本书,您需要将其放入的图书馆的名称。要获取可用库的列表,请运行:

      calibredb add --with-library=http://localhost:NNNN/#-
      

      硬编码生成的库名称 (LLL),或者如果您只有一个库,您可以再次从上述命令的输出中动态提取名称。如果您有多个库,则需要决定新添加的内容应该放在哪里。

      现在你有了端口号(NNNN)和库名(LLL),你可以这样做:

      calibredb add --with-library=http://localhost:NNNN/#LLL
      

      您还可以使用选项--automerge=ignore 来防止再次添加已经在数据库中的书籍。将ignore 替换为overwrite 以替换现有文件,并用new_record 替换以创建额外条目。

      以上假设 calibre 与 cgi 脚本在同一台机器上运行。如果没有,则需要配置认证

      【讨论】:

        猜你喜欢
        • 2021-09-17
        • 1970-01-01
        • 2012-02-16
        • 2022-01-16
        • 2011-02-04
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 2023-03-26
        相关资源
        最近更新 更多