运行代码的这一部分时,我总是收到错误消息。我曾尝试按照universal_newlines=True
文档的建议实现subprocess.check_output
,但遇到相同的错误。为什么会发生这种情况,我该怎么解决?
for filename in os.listdir(directory):
if filename in new_list:
pdf = filename
output = subprocess.check_output(['pdftotext', '-layout', pdf, '-'], universal_newlines=True).decode()
pages = output.strip('\f').split('\f')
page = pages[-1]
错误信息:
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
<ipython-input-153-adc4a58d7f21> in <module>
9 if filename in new_list:
10 pdf = filename
---> 11 output = subprocess.check_output(['pdftotext', '-layout', pdf, '-'], universal_newlines=True).decode()
12 pages = output.strip('\f').split('\f')
13 page = pages[-1]
/usr/lib/python3.8/subprocess.py in check_output(timeout, *popenargs, **kwargs)
409 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
410
--> 411 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
412 **kwargs).stdout
413
/usr/lib/python3.8/subprocess.py in run(input, capture_output, timeout, check, *popenargs, **kwargs)
510 retcode = process.poll()
511 if check and retcode:
--> 512 raise CalledProcessError(retcode, process.args,
513 output=stdout, stderr=stderr)
514 return CompletedProcess(process.args, retcode, stdout, stderr)
CalledProcessError: Command '['pdftotext', '-layout', 'coburns.pdf', '-']' returned non-zero exit status 1.
最佳答案
如评论中所述,当进程返回的代码不是check_output
时, CalledProcessError
实际上意味着提高0
。
这里的代码是1
,它指示pdftotext
无法打开pdf,原因是它不正确或因为找不到它。
您正在使用 os.listdir
,它产生的文件名相对于directory
参数,该文件名不一定与当前的工作目录相同,默认情况下check_output
将在该工作目录中启动pdftotext
。
我可以看到三种解决方案:
cwd
的check_output
参数在pdftotext
和directory
os.path.join(directory, filename)
或 pathlib.Path(directory)/filename
,os.listdir
替换对os.scandir
的调用,这会产生一个同时具有DirEntry
和name
属性的 path
对象,您可以分别在测试中使用它们,并作为pdftotext
的参数。 关于python - CalledProcessError : Command '[' pdftotext', '-layout' , 'coburns.pdf' , '-' ]' returned non-zero exit status 1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61561411/