CalledProcessError: 命令 '['pdftotext', '-layout', 'coburns.pdf', '-']' 返回非零退出状态 1?



我在运行这部分代码时不断收到错误。我尝试按照subprocess.check_output文档的建议实现universal_newlines=True,但遇到了同样的错误。为什么会发生这种情况,我该怎么做才能解决它?

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实际上是为了在进程返回的代码未0时引发CalledProcessError

这里这段代码是1,这表明pdftotext无法打开 pdf,要么是因为它不正确,要么是因为它找不到它。

您正在使用os.listdir,它生成相对于directory参数的文件名,该参数不一定与默认情况下check_output将在其中启动pdftotext的当前工作目录相同。

我可以看到三种解决方案:

  • 您可以使用check_outputcwd参数在directory中启动pdftotext
  • 您可以使用os.path.join(directory, filename)pathlib.Path(directory)/filename重建文件的相对路径,
  • 或者,您可以将os.listdir调用替换为os.scandir,这将生成一个同时具有namepath属性的DirEntry对象,您可以分别在测试中使用该对象并用作pdftotext的参数。

相关内容

  • 没有找到相关文章

最新更新