Не могу передать подпроцессы с помощью `python.subprocess` для изменения размера и преобразования изображений в Django` model.save () `

1

Я хочу создать и изменить изображение веб-сайта, и изображение можно создать в нужном месте сейчас, как показано ниже, но я не могу изменять и форматировать эти изображения.

class Bookmark(models.Model):

    title = models.CharField(max_length=200)
    user = models.ForeignKey(User)       
    link = models.ForeignKey(Link)

    def __unicode__(self):
        return "%s, %s" % (self.user, self.link.url)
    def save_image(self):
        import subprocess
        import os
        url = self.link.url.replace("http://","").replace("https://","")\
                  .replace("/","|")
        image_png = './teststatic/url_image/' + url + ".png"
        image_jpg = './teststatic/url_image/' + url + ".jpg"
        command_line = "python", "webkit2png.py","-o", image_png, self.link.url
        image_crop = "mogrify", "-crop", "1280x1024+0+0", image_png
        image_convert = "mogrify", "-format", "jpg", image_png 
        image_del = "rm", image_png
        image_resize = "mogrify", "-resize", "150", "-quality", "80", image_jpg
        p1=subprocess.Popen(command_line, stdout=subprocess.PIPE)
        p2=subprocess.Popen(image_crop, stdin=p1.stdout, stdout=subprocess.PIPE)
        p3=subprocess.Popen(image_convert, stdin=p2.stdout, stdout=subprocess.PIPE)
        p4=subprocess.Popen(image_del, stdin=p3.stdout, stdout=subprocess.PIPE)
        subprocess.Popen(image_resize, stdin=p4.stdout, stdout=subprocess.PIPE)

Здесь трассировка ошибки (переформатированная для удобочитаемости):

mogrify: unable to open image './teststatic/url_image/z.cn.png': \
   png.la @ error/blob.c/OpenBlob/2489mogrify: unable to open image \
   './teststatic/url_image/z.cn.png': png.la @ error/blob.c/OpenBlob/2489rm: \
    cannot remove './teststatic/url_image/z.cn.png': No such file or directory
.
mogrify: unable to open image './teststatic/url_image/z.cn.png':  \
    @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/z.cn.png' \
    @ error/png.c/ReadPNGImage/2951.
.
mogrify: unable to open image './teststatic/url_image/z.cn.png': \
    @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/z.cn.png' \
    @ error/png.c/ReadPNGImage/2951.
mogrify: unable to open image './teststatic/url_image/z.cn.jpg': \
    jpeg.la @ error/blob.c/OpenBlob/2489.
mogrify: unable to open image './teststatic/url_image/z.cn.jpg': \
     @ error/blob.c/OpenBlob/2489.
rm: cannot remove './teststatic/url_image/www.igoogle.com|.png': \
    No such file or directory
mogrify: unable to open image './teststatic/url_image/www.igoogle.com|.png': \
    png.la @ error/blob.c/OpenBlob/2489.
mogrify: unable to open image './teststatic/url_image/www.igoogle.com|.png': \
     @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/www.igoogle.com|.png'\
     @ error/png.c/ReadPNGImage/2951.
mogrify: unable to open image './teststatic/url_image/www.igoogle.com|.png':\
     png.la @ error/blob.c/OpenBlob/2489mogrify: unable to open image \
    './teststatic/url_image/www.igoogle.com|.jpg': \
    jpeg.la @ error/blob.c/OpenBlob/2489.
mogrify: unable to open image './teststatic/url_image/www.igoogle.com|.png': \
     @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/www.igoogle.com|.png' \
    @ error/png.c/ReadPNGImage/2951.
rm: .
mogrify: unable to open image './teststatic/url_image/www.igoogle.com|.jpg':  \
    @ error/blob.c/OpenBlob/2489.
cannot remove './teststatic/url_image/www.z.cn|.png': No such file or directory
mogrify: unable to open image './teststatic/url_image/www.z.cn|.png':\
     png.la @ error/blob.c/OpenBlob/2489.
mogrify: unable to open image './teststatic/url_image/www.z.cn|.png': \
     @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/www.z.cn|.png'\
     @ error/png.c/ReadPNGImage/2951.
mogrify: unable to open image './teststatic/url_image/www.z.cn|.png': \
    png.la @ error/blob.c/OpenBlob/2489.
mogrify: unable to open image './teststatic/url_image/www.z.cn|.png':  \
    @ error/blob.c/OpenBlob/2489.
mogrify: unable to open file './teststatic/url_image/www.z.cn|.png'\
     @ error/png.c/ReadPNGImage/2951.
rm: mogrify: unable to open image './teststatic/url_image/www.z.cn|.jpg': \
    jpeg.la @ error/blob.c/OpenBlob/2489cannot remove './teststatic/url_image
...
...

У трубы есть некоторые проблемы, как я могу это решить?

  • 0
    вызов другого интерпретатора Python с использованием подпроцесса - это почти наверняка признак того, что вы думаете о проблеме неправильно ... Кроме того, есть ли какая-то причина, по которой вы не можете: изменить размер с помощью PIL?
  • 0
    Привет, я просто отсылаю статью автора, используя webkit2png.py и ImageMagick. Есть ли большая разница между двумя приложениями?
Теги:
django-models
subprocess

1 ответ

0
Лучший ответ

Второй процесс зависит от файла, который генерируется первым процессом. Однако первый процесс еще не завершен, когда второй запускается, поэтому png изображение еще не существует. Вместо этого используйте subprocess.call() или метод wait():

p1=subprocess.Popen(command_line, stdout=subprocess.PIPE)
return_code = p1.wait()
if return_code > 0:
    raise Exception('First process failed!')

...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню