2014-11-24 2 views
0

Я хочу сжать все pdf-файлы в каталоге с помощью ghostscript. Я думал использовать Python для чтения файлов и команда гс, что сжать PDF являетсяСценарий для сжатия всех файлов PDF в каталоге

from __future__ import print_function 
import os 
for path, dirs, files in os.walk("/home/mario/books"): 
    for file in files: 
     if file.endswith(".pdf"): 
      filename = os.path.join(root, file) 
      gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -dQUIET -sOutputFile=file filename 

Это дает синтаксическую ошибку в «/ экран», Для одного файла ниже команды работает отлично

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -dQUIET -sOutputFile=output.pdf input.pdf 

Может ли кто-нибудь помочь мне исправить этот сценарий или альтернативное решение?

+1

Вам нужно вызвать функцию python, которая выполняет программы. Проверьте 'subprocess.call'. Кроме того, при склеивании имени файла вы используете неправильное имя переменной, оно должно быть 'filename = os.path.join (путь, файл)'. – tdelaney

+0

['find ... -exec'] (http://unixhelp.ed.ac.uk/CGI/man-cgi?find) может быть более простым вариантом. – georg

ответ

1

Спасибо за предложение tdelaney Я попробовал subprocess.call, который помог. Ниже приведен код проблемы.

from __future__ import print_function 
import os 
import subprocess 
for root, dirs, files in os.walk("."): 
for file in files: 
    if file.endswith(".pdf"): 
     filename = os.path.join(root, file) 
     arg1= '-sOutputFile=' +"v"+ file 
     p = subprocess.Popen(['/usr/bin/gs', '-sDEVICE=pdfwrite', '-dCompatibilityLevel=1.4', '-dPDFSETTINGS=/screen', '-dNOPAUSE', '-dBATCH', '-dQUIET', str(arg1), filename], stdout=subprocess.PIPE) 
     print (p.communicate()) 

Также найти ... -exec - хороший вариант для сценария оболочки.

+0

Я не могу заставить это работать на Windows 7. Это другая команда –

+0

@YankiTwizzy да – Kalanamith

Смежные вопросы