当我从本地机器更改为我的虚拟主机时,从python脚本调用pdftotext不起作用

Cha*_*nya 4 python scripting subprocess dreamhost pdftotext

我写了一个小的python脚本来解析/提取PDF中的信息.我在我的本地机器上测试过,我有python 2.6.2和pdftotext版本0.12.4.

我试图在我的虚拟主机服务器(dreamhost)上运行它.它有python版本2.5.2和pdftotext版本3.02.

但是当我尝试运行脚本时,我在pdftotext行遇到以下错误(我已经用一个简单的丢弃脚本检查了它)"错误:无法打开文件' - '"

def ConvertPDFToText(currentPDF):
    pdfData = currentPDF.read()

    tf = os.tmpfile()
    tf.write(pdfData)
    tf.seek(0)

    if (len(pdfData) > 0) :
        out, err = subprocess.Popen(["pdftotext", "-layout", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
        return out
    else :
        return None
Run Code Online (Sandbox Code Playgroud)

请注意,我将此函数传递给相同的PDF文件,并且它可以访问它.在另一个函数中,我可以通过webhost上运行的相同脚本向自己发送PDF文档.

我究竟做错了什么?在本地版本和webhost版本之间subprocess/python/pdftext的使用可能有什么不同?我猜我将不得不修改命令,所以任何帮助将不胜感激.

提前致谢.

Cha*_*nya 6

答案的提示在Noufal的评论中,使用文件名.但是os.tmpfile()没有文件名.我不得不使用另一个模块.修改后的代码如下.

#import tempfile
def ConvertPDFToText(currentPDF):
    pdfData = currentPDF.read()

    tf = tempfile.NamedTemporaryFile()
    tf.write(pdfData)
    tf.seek(0)

    outputTf = tempfile.NamedTemporaryFile()

    if (len(pdfData) > 0) :
        out, err = subprocess.Popen(["pdftotext", "-layout", tf.name, outputTf.name ]).communicate()
        return outputTf.read()
    else :
        return None
Run Code Online (Sandbox Code Playgroud)

我不确定如何给Noufal的评论提供这个答案的要点.也许他可以剪切并粘贴这个答案?