【发布时间】: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