Почему символ ' ^ 'игнорируется Python Popen - как избежать символа' ^ ' в Popen Windows?
Я подготовил некоторый код для выполнения такой командной строки:
c:cygwinbinconvert "c:rootdropboxwwwtiffphotosarchitecturecalendar-bwl-projektbwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:rootdropboxwwwtiffthumbnailsarchitecturecalendar-bwl-projektthumbnailbwl01.jpg"
Это прекрасно работает из командной строки (та же команда, что и выше), но 352x352^ это 352x352^ не 352x352:
c:cygwinbinconvert "c:rootdropboxwwwtiffphotosarchitecturecalendar-bwl-projektbwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:rootdropboxwwwtiffthumbnailsarchitecturecalendar-bwl-projektthumbnailbwl01.jpg"
Если запустить этот код из python-символ ' ^ 'игнорируется и измененное изображение имеет размер как' %sx%s 'передается не %sx%s^ - Почему Python вырезает символ' ^ ' и как этого избежать?:
def resize_image_to_jpg(input_file, output_file, size):
resize_command = 'c:\cygwin\bin\convert "%s" -thumbnail %sx%s^ -format jpg -filter Catrom -unsharp 0x1 "%s"'
% (input_file, size, size, output_file)
print resize_command
resize = subprocess.Popen(resize_command)
resize.wait()
1 ответ:
Почему Python вырезает символ ' ^ ' и как этого избежать?
Python не вырезает
^
символ.Popen()
передает строку (resize_command
) вCreateProcess()
вызов API Windows как есть.Легко проверить:
Последняя команда использует#!/usr/bin/env python import sys import subprocess subprocess.check_call([sys.executable, '-c', 'import sys; print(sys.argv)'] + ['^', '<-- see, it is still here'])
subprocess.list2cmdline()
, которая следует правилам синтаксического анализа аргументов командной строки C для преобразования списка в командную строку-это не влияет на^
.Если и только если произведенная командная строка будет интерпретирована cmd, префикс каждого метасимвола оболочки (или каждого символа) с символом
^
. Она включает в себя^
саму себя.