Не удается получить рабочую командную строку в командной строке для работы с подпроцессом
Мне нужно извлечь текст из PDF. Я попробовал PyPDF2, но метод textExtract возвратил зашифрованный текст, хотя PDF не зашифрован в соответствии с методом isEncrypted.
Поэтому я перешел к попытке доступа к программе, которая выполняет эту работу, из командной строки, чтобы я мог вызывать ее из 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 ответа
Мне удалось заставить работать следующий скрипт из командной строки после установки приложения 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.
Я не знаю, влияет ли ваше использование spyder на anaconda, или нет, так как я не знаком с ним / ними. Если у вас по-прежнему возникают проблемы с этим, тогда, если это возможно, я предлагаю вам посмотреть, сможете ли вы заставить все работать напрямую - то есть запустить интерпретатор Python на скрипте вручную из командной строки, как показано выше. Если это работает, но использование spyder - нет, то вы, по крайней мере, будете знать причину проблемы.
Нет необходимости создавать строку из строк в кавычках, а затем анализировать их обратно в список строк. Просто создайте список и передайте это:
command=["textextract.exe", "download.pdf", "/to", "download.txt"]
subprocess.run(command)
Все это shlex.split
делает создание списка, удаляя все кавычки, которые вы должны были добавить при создании строки в первую очередь. Это дополнительный шаг, который не дает никакой ценности по сравнению с созданием списка самостоятельно.