Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t在提示符下获取工作命令行以处理子流程_Python_Pdf_Cmd_Subprocess_Pypdf2 - Fatal编程技术网

Python Can';t在提示符下获取工作命令行以处理子流程

Python Can';t在提示符下获取工作命令行以处理子流程,python,pdf,cmd,subprocess,pypdf2,Python,Pdf,Cmd,Subprocess,Pypdf2,我需要从PDF中提取文本。我尝试了PyPDF2,但是textExtract方法返回了一个加密文本,即使pdf没有按照isEncrypted方法进行加密 因此,我继续尝试从命令提示符访问执行该任务的程序,这样我就可以使用子流程模块从python调用它。我发现这个程序名为textextextract,它通过cmd上的以下命令行完成了我想要的任务: “textextextract.exe”“download.pdf”/to“download.txt” 但是,当我尝试使用子流程运行它时,我无法获得0返

我需要从PDF中提取文本。我尝试了PyPDF2,但是textExtract方法返回了一个加密文本,即使pdf没有按照isEncrypted方法进行加密

因此,我继续尝试从命令提示符访问执行该任务的程序,这样我就可以使用子流程模块从python调用它。我发现这个程序名为
textextextract
,它通过cmd上的以下命令行完成了我想要的任务:

“textextextract.exe”“download.pdf”/to“download.txt”
但是,当我尝试使用
子流程运行它时,我无法获得
0
返回代码

以下是我尝试的代码:

textextract = shlex.split(r'"textextract.exe" "download.pdf" /to "download.txt"')
subprocess.run(textextract)
我已经用
shell=True
试过了,但没有成功。
有人能帮我吗?

在安装您尝试使用的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-textextextract.py
参数:['textextextract.exe','download.pdf','/to','download.txt']
进展:
已成功提取“download.pdf”中的文本。。。
文本提取已经完成!
上述输出是使用Python 3.7.0生成的


我不知道你在anaconda上使用spyder是否会影响事情,因为我对它/它们不熟悉。如果您在这方面仍然存在问题,那么,如果可能的话,我建议您看看是否可以直接工作,即从命令行手动运行脚本上的Python解释器,类似于上面所示。如果这样做行得通,但使用spyder不行,那么您至少可以知道问题的原因。

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

command=["textextract.exe", "download.pdf", "/to", "download.txt"]
subprocess.run(command)

shlex.split
所做的就是通过删除创建字符串时必须添加的所有引号来创建一个列表。这是一个额外的步骤,与自己创建列表相比没有任何价值

您正在使用的
/to
是什么?do或mean?to是程序语法的一部分。它告诉textextract将pdf文件转换为txt文件。我尝试通过子进程运行cmd.exe,但它进入了一个无休止的外观(不知道为什么)并且不起作用…如果
/to
是正在启动的进程的一个参数,则在传递给
子进程时,它应该在其周围加上引号,作为参数之一。类似于我对这个问题的回答,它展示了一个传递它们的例子。