【问题标题】:Write output of pdftohtml to stdout将 pdftohtml 的输出写入标准输出
【发布时间】:2021-07-22 19:11:23
【问题描述】:

我想为一个 pdf 文件运行 pdftohtml 并将其输出写入 /dev/stdout 或允许我直接从 subprocess 捕获输出的东西。

我的代码:

cmd = ['pdftohtml', '-c', '-s', '-i', '-fontfullname', filename, '-stdout', '/dev/stdout']

result = subprocess.run(cmd, stdout=PIPE, stderr=STDOUT, text=True)

上面的代码以代码-11退出。

我在 WSL 2 中使用 Ubuntu 18.04 运行它。

我尝试在 bash 中执行相同的命令:

[1]    14041 segmentation fault (core dumped)  pdftohtml -c -s -i -fontfullname  -stdout /dev/stdout

也不能将“-”传递给标准输出值。

我该怎么做才能直接从subprocess.run 获取 html 输出?

我知道可以通过管道传输 cat 并将文件名输出到命令,但这不是我想要的。

解决方案必须兼容 WSL2 和 python 拉伸 docker 镜像。但是,任何澄清都会有所帮助:)

【问题讨论】:

  • 为什么要在-stdout 后面加上/dev/stdout?另外,我没有看到您的段错误消息中列出的 输入文件;如果在那个位置传递的是一个空字符串,那就可以解释了。如果它将/dev/stdout 视为要读取的输入文件——正如人们所期望的那样,它作为第一个/唯一的位置参数传递),那么崩溃也就不足为奇了。
  • 我在-stdout 之后添加了/dev/stdout 作为尝试将输出“打印”到屏幕而不是写入文件。传递的输入文件是有效的一页 pdf 页面。如果我将常规 html 路径传递给 pdftohtml,我可以将其转换为 html,但传递 /dev/stdout 不起作用,如解释
  • 好的,我正在使用 poppler 的 pdftohtml。如果我把它写下来,-stdout 标志并不意味着接收任何通行证,因为无论如何它都会写入 /dev/stdout。因此,通过更正来自 python 的调用,我可以让它工作:CompletedProcess(args=['pdftohtml', '-c', '-s', '-i', '-fontfullname', '/tmp/split-diario-oficial-dje-tjgo-tjgo-i-3254-2021-06-18-80.pdf', '-stdout'], returncode=0, stdout='Page-1\n')。如果它看起来是正确的,那么 html 输出在哪里?
  • FWIW,pdftohtml -s -i -stdout filename.pdf 确实为我工作。 (我对同时使用-c-s 持怀疑态度;“复杂输出”模式我希望只在写入多个文件时才有效,因为它设置了多个帧)。
  • 太好了,它也可以在这里工作。 -c 是罪魁祸首。如果您将其作为答案提交,我会接受。谢谢你帮助我

标签: python-3.x bash subprocess windows-subsystem-for-linux pdf-to-html


【解决方案1】:

“复杂输出模式”,-c,指定使用帧的输出。这仅在写入文件时有效。

如果您想写入标准输出,请仅使用 -s 而不使用 -c - 并省略 /dev/stdout 作为参数(“stdout”是预先打开的文件描述符;因为它已经打开,所以有没有理由使用名称来打开它,所以-stdout 是一个标志类型的选项,而不是一个带有选项参数的选项。

【讨论】:

    猜你喜欢
    • 2014-07-03
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2013-09-18
    • 1970-01-01
    • 2019-06-19
    • 2014-11-09
    相关资源
    最近更新 更多