【问题标题】:subprocess.run simple scenario failssubprocess.run 简单场景失败
【发布时间】:2018-12-05 09:10:14
【问题描述】:

我正在尝试运行 python subprocess.run 函数来执行以下命令:

 pdftoppm -jpeg -f 1 -scale-to 200 data/andromeda.pdf and-page

pdftoppm - 是 poppler 实用程序的一部分,它从 pdf 文件生成图像。

文件 data/andromeda.pdf 存在。文件夹数据与 python 脚本和/或我从中运行命令的位置处于同一级别。 命令基本上会从给定的and-page-1.jpeg格式(所谓的ppmtroot)文件的第1页(-f 1)200px宽(-scale-to)生成一个jpeg文件。

长话短说:从命令行按预期工作,即如果我从 zsh 或 bash shell 手动调用上述命令 - 它会按预期生成缩略图。但是,如果我 从 python 子进程模块运行它 - 它会失败 它会返回 99 错误代码!

以下是python代码(文件名为sc_02_thumbnails.py):

import subprocess
import sys


def main(filename, ppmroot):
    cmd = [
        'pdftoppm',
        '-f 1',
        '-scale-to 200',
        '-jpeg',
        filename,
        ppmroot
    ]
    result = subprocess.run(
        cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )
    if result.returncode:
        print("Failed to generate thumbnail. Return code: {}. stderr: {}".format(
            result.returncode,
            result.stderr
        ))
        print("Used cmd: {}".format(' '.join(cmd)))
        sys.exit(1)
    else:
        print("Success!")         


if __name__ == "__main__":
    if len(sys.argv) > 2:
        filename = sys.argv[1]
        ppmroot = sys.argv[2]
    else:
        print("Usage: {} <pdffile> <ppmroot>".format(sys.argv[0]))
        sys.exit(1)

    main(filename, ppmroot)

here 是一个包含 data/andromeda.pdf 文件的仓库。 我用 as (from zsh) 调用我的脚本:

 $ chmod +x ./sc_02_thumbnauils.py
 $ ./sc_02_thumbnails.py data/andromeda.pdf  and-page

并且...缩略图生成失败! 我尝试从 zsh 和 bash shell 执行 python 脚本:( 我做错了什么?

【问题讨论】:

    标签: python python-3.x subprocess pdftoppm


    【解决方案1】:

    引用错误,你应该有'-f', '1',

    【讨论】:

    • 太棒了,这解决了我的问题!从昨天开始,我一直在为此苦苦挣扎!我不知道为什么,但是 SO 禁止我在两分钟内接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2016-01-17
    • 2019-08-06
    相关资源
    最近更新 更多