好的,这里是我的input.pdf文件的链接,如果有人想尝试使用subprocess.Popen使用ghostscript将这个pdf文件转换为txt文件,我已经尝试了我能想到的一切根据你的答案到目前为止。
再次,从命令行执行ghostscript直接工作正常,这是我通过cmd行获得的:
C:\Misc>gswin32c -dBATCH -dNOPAUSE -sPageList=1- -sDEVICE=txtwrite -sOutputFile=
output.txt input.pdf
GPL Ghostscript 9.21 (2017-03-16)
Copyright (C) 2017 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1-.
Page 1
Page 2
Page 3
Page 4
Page 5
然而,以下Python代码返回非零退出状态1.在subprocess.check_output()中,我已删除文件名变量并直接放入文件名路径以使更多内容简单。
import subprocess, os
#path for ghostscript executable
gs_path = 'C:\\Program Files\\gs\\gs9.21\\bin'
# dir where pdfs are located
dir_name = 'C:\\Misc'
# pdf to extract text from
file_name = os.path.join(dir_name,'input.pdf')
# output text file name
outfile_name = os.path.join(dir_name,'output.txt')
os.chdir(dir_name)
subprocess.check_output(['gswin32c',
'-dBATCH', '-dNOPAUSE', '-sPageList=1-', 'sDEVICE=txtwrite',
'-sOUTPUTFILE=C:\\Misc\\output.txt',
'C:\\Misc\\input.pdf'])
Python的完整输出是(Anaconda Python 3.5):
runfile('I:/Downloads/0.data/help_pdf.py', wdir='I:/Downloads/0.data')
Traceback (most recent call last):
File "<ipython-input-26-0ba7dc571302>", line 1, in <module>
runfile('I:/Downloads/0.data/help_pdf.py', wdir='I:/Downloads/0.data')
File "C:\Custom_Programs\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 688, in runfile
execfile(filename, namespace)
File "C:\Custom_Programs\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "I:/Downloads/0.data/help_pdf.py", line 28, in <module>
'C:\\Misc\\input.pdf'])
File "C:\Custom_Programs\Anaconda\lib\subprocess.py", line 316, in check_output
**kwargs).stdout
File "C:\Custom_Programs\Anaconda\lib\subprocess.py", line 398, in run
output=stdout, stderr=stderr)
CalledProcessError: Command '['gswin32c', '-dBATCH', '-dNOPAUSE', '-sPageList=1-', 'sDEVICE=txtwrite', '-sOUTPUTFILE=C:\\Misc\\output.txt', 'C:\\Misc\\input.pdf']' returned non-zero exit status 1
好像它的input.pdf文件路径有问题。
答案 0 :(得分:0)
您误解了上游文档。当它告诉你:
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -dGraphicsAlphaBits=4 \
-sOutputFile=tiger.png tiger.eps
-sOutputFile=tiger.png
和tiger.eps
是两个独立的参数,您需要将它们传递到不同的数组位置。
以下代码已在MacOS上使用您的input.pdf
成功测试:
#!/usr/bin/env python3.5
import subprocess, sys
gs = 'gswin32c' if (sys.platform == 'win32') else 'gs'
file_name = 'input.pdf'
outfile_name = 'output.txt'
subprocess.check_output([gs,
'-dBATCH', '-dNOPAUSE', '-sPageList=1-', '-sDEVICE=txtwrite',
'-sOUTPUTFILE=%s' % (outfile_name,), file_name])
请注意,-sDEVICE=
以-
开头,之前的情况并非如此。