为什么 Python Popen 忽略字符 '^' - 如何在 Popen Windows 中转义 '^' 字符?
Why character '^' is ignored byt Python Popen - how to escape '^' character in Popen Windows?
我准备了一些代码来执行这样的命令行:
c:\cygwin\bin\convert "c:\root\dropbox\www\tiff\photos\architecture\calendar-bwl-projekt\bwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:\root\dropbox\www\tiff\thumbnails\architecture\calendar-bwl-projekt\thumbnail\bwl01.jpg"
这在命令行中工作正常(与上面相同的命令)但 352x352^ 是 352x352^ 而不是 352x352:
c:\cygwin\bin\convert "c:\root\dropbox\www\tiff\photos\architecture\calendar-bwl-projekt\bwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:\root\dropbox\www\tiff\thumbnails\architecture\calendar-bwl-projekt\thumbnail\bwl01.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()
Why Python cuts '^' character and how to avoid it?
Python 不剪切 ^
字符。 Popen()
将字符串 (resize_command
) 传递给 CreateProcess()
Windows API 按原样调用。
容易测试:
#!/usr/bin/env python
import sys
import subprocess
subprocess.check_call([sys.executable, '-c', 'import sys; print(sys.argv)'] +
['^', '<-- see, it is still here'])
后一个命令使用遵循Parsing C Command-Line Arguments规则的subprocess.list2cmdline()
将列表转换为命令字符串——它对^
没有影响。
^
is not special for CreateProcess()
. ^
is special if you use shell=True
(when cmd.exe
is run).
我准备了一些代码来执行这样的命令行:
c:\cygwin\bin\convert "c:\root\dropbox\www\tiff\photos\architecture\calendar-bwl-projekt\bwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:\root\dropbox\www\tiff\thumbnails\architecture\calendar-bwl-projekt\thumbnail\bwl01.jpg"
这在命令行中工作正常(与上面相同的命令)但 352x352^ 是 352x352^ 而不是 352x352:
c:\cygwin\bin\convert "c:\root\dropbox\www\tiff\photos\architecture\calendar-bwl-projekt\bwl01.tif" -thumbnail 352x352^ -format jpg -filter Catrom -unsharp 0x1 "c:\root\dropbox\www\tiff\thumbnails\architecture\calendar-bwl-projekt\thumbnail\bwl01.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()
Why Python cuts '^' character and how to avoid it?
Python 不剪切 ^
字符。 Popen()
将字符串 (resize_command
) 传递给 CreateProcess()
Windows API 按原样调用。
容易测试:
#!/usr/bin/env python
import sys
import subprocess
subprocess.check_call([sys.executable, '-c', 'import sys; print(sys.argv)'] +
['^', '<-- see, it is still here'])
后一个命令使用遵循Parsing C Command-Line Arguments规则的subprocess.list2cmdline()
将列表转换为命令字符串——它对^
没有影响。
^
is not special for CreateProcess()
. ^
is special if you use shell=True
(when cmd.exe
is run).