Режим MozJPEG STDIN с переключателями

Я могу заставить stdin/out нормально работать с mozjpeg 3, если я просто запускаю без каких-либо флагов. Пример (Питон):

fp = urllib.urlopen(http://path.to/unoptimized.jpg)
out_im2 = StringIO.StringIO(fp.read()) # StringIO Image
subp = subprocess.Popen(["/home/ubuntu/mozjpeg/cjpeg"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
    image_results = subp.communicate(input=out_im2.getvalue())

Однако, если я попытаюсь настроить это с помощью переключателей (например, «-качество 70»), я не смогу заставить его работать. Я не уверен, что это ошибка или я что-то упускаю. Любое понимание будет с благодарностью:

subp = subprocess.Popen(["/home/ubuntu/mozjpeg/cjpeg", "-quality 70"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
image_results = subp.communicate(input=out_im2.getvalue())

После этого выполнения я получаю обратно следующее:

/home/ubuntu/mozjpeg/.libs/lt-cjpeg: unknown option 'quality 70'
usage: /home/ubuntu/mozjpeg/.libs/lt-cjpeg [switches] [inputfile]
Switches (names may be abbreviated):
  -quality N[,...]   Compression quality (0..100; 5-95 is useful range)
.... <Rest of --help screen>

Заранее благодарю за любую помощь.


person ryan83    schedule 25.02.2015    source источник
comment
почему вы используете out_im2 StringIO вместо прямой передачи subp.communicate(input=fp.read())? Вы даже можете перенаправить стандартный ввод подпроцесса из сокета (это работает в Ubuntu), не загружая его в память.   -  person jfs    schedule 26.02.2015


Ответы (1)


Благодаря https://github.com/njdoyle "-качество 70" должно быть "-качество", "70 ». Два параметра.

So:

subp = subprocess.Popen(["/home/ubuntu/mozjpeg/cjpeg", "-quality","70"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
image_results = subp.communicate(input=out_im2.getvalue())
person ryan83    schedule 25.02.2015
comment
прочитайте раздел Часто используемые аргументы в документации подпроцесса, чтобы не зацикливайтесь на простых вещах. - person jfs; 26.02.2015