подпроцесс python для команды convert - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть функция для преобразования pdf-файла в миниатюру после загрузки.

def book_post_save(sender, instance=False, **kwargs):

     pdf = Post.objects.get(pk=instance.pk)
     command = "convert -quality 95 -thumbnail 100 %s%s[0] %s%s" % (
             settings.MEDIA_ROOT,
             pdf.file,
             settings.MEDIA_ROOT,
             pdf.file
         )
     proc = subprocess.Popen(
             command,
             shell=True,
             stdin=subprocess.PIPE,
             stdout=subprocess.PIPE,
             stderr=subprocess.PIPE,
         )
     stdout_value = proc.communicate()[0]

post_save.connect(book_post_save, sender=Post)

Но команда подпроцесса ничего не возвращает.Я попытался напечатать это в терминале, но я получил subprocess-error-return-return-non-zero-exit-status-1 .У меня нет созданного эскиза.

1 Ответ

0 голосов
/ 01 октября 2018

Я думаю, что причина вашей проблемы в том, что вы выбрасываете сообщение об ошибке.

Метод коммуникации возвращает кортеж с двумя элементами, stdin и stdout.Код выше (а именно proc.communicate()[0]) берет первый элемент (stdin), но игнорирует stderr.

Так что я бы предложил изменить ваш код, сделав следующее:

stdout_value, stderr_value = proc.communicate()

Как только высделали это, если процесс завершился неудачно, вы можете напечатать stderr_value и выяснить, почему процесс не прошел.

...