当运行这部分代码时,我一直得到一个错误。我试过实现 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
.