Python3 - 将标准输出存储到数组变量中

Python3 - Store stdout into an array variable

我有一个 Python 脚本,可以将 PDF 内容转换为字符串。

text = list();

#npages is number of pages in the PDF file.
for n in range(npages):
    text[n] = os.system('pdftotext myfile.pdf -') #the "-" prints to stdout.

print(text)

然而,当我打印 text 时,这是输出(一个包含两页的 PDF 文件):

{0: 0, 1: 0}

当 运行 脚本时,我看到 os.system 输出被发送到命令行:

text from myfile.pdf page 1
text from myfile.pdf page 2

如何将 pdftotext 命令的标准输出存储在列表中?

您没有收到命令行输出,只有返回的系统代码。通常 0 表示成功,这意味着您对 npages 0 和 1 的命令已成功。

您可以使用 subprocess 并将输出重定向到您的 Python 脚本。 shorthand 是:

import subprocess

out = subprocess.check_output(['ls', '-lh']) # example
print(out)

要接受短 -,您需要使用 subprocess.Popen(bufsize=0)。这应该有效:

cmd = ['pdftotext', 'myfile.pdf', '-']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=0)
# get output and error
out, err = proc.communicate()

print(out)