无法在提示符下获得工作命令行以在子流程上工作

时间:2018-10-09 23:38:27

标签: python pdf cmd subprocess pypdf2

我需要从PDF中提取文本。我尝试了PyPDF2,但是即使未根据isEncrypted方法对pdf进行加密,textExtract方法也返回了加密的文本。

因此,我继续尝试从命令提示符处访问执行该任务的程序,因此可以使用subprocess模块​​从python调用它。我找到了名为textExtract的程序,它通过cmd上的以下命令行完成了我想要的工作:

"textextract.exe" "download.pdf" /to "download.txt"

但是,当我尝试使用subprocess运行它时,我没有得到0的返回代码。

这是我尝试的代码:

textextract = shlex.split(r'"textextract.exe" "download.pdf" /to "download.txt"')
subprocess.run(textextract)

我已经用shell=True尝试过,但是没有用。 谁能帮我吗?

2 个答案:

答案 0 :(得分:0)

在安装要使用的PDF2Text Pilot应用程序后,我能够从命令行获取以下脚本:

import shlex
import subprocess

args = shlex.split(r'"textextract.exe" "download.pdf" /to "download.txt"')
print('args:', args)
subprocess.run(args)

从命令行会话运行它的示例屏幕输出:

> C:\Python3\python run-textextract.py
args: ['textextract.exe', 'download.pdf', '/to', 'download.txt']
Progress:
Text from "download.pdf" has been successfully extracted...
Text extraction has been completed!

以上输出是使用Python 3.7.0生成的。

我不知道您在Anaconda上使用spyder是否会影响事情,因为我对此并不熟悉。如果您仍然对此有疑问,那么,如果可能的话,我建议您看看是否可以使事情直接起作用。与上面显示的类似,从命令行手动在脚本上运行Python解释器。如果可以,但是使用spyder无效,那么您至少会知道问题的原因。

答案 1 :(得分:0)

无需构建带引号的字符串的字符串,然后将其解析回字符串列表。只需创建一个列表并将其传递即可:

def update(self):
    "Update the canvas and the scrollregion"
    self.update_idletasks()
    canvas.config(scrollregion=canvas.bbox(self.windows_item))

for index in range(input1//2 + 1): value_to_subtract = input2[index] for _index in range(2*index+1,input1,index+1): input2[_index] -= value_to_subtract print(input2) 所做的所有事情都是通过删除您首先创建字符串时必须添加的所有引号来创建列表。这是一个额外的步骤,与仅自己创建列表相比没有任何价值。