猿问

Python子进程忽略转换命令中的反斜杠

我想使用“转换”来调整多个图像的大小。

这在命令行中非常有效。

但是,当我尝试使用 subprocess.Popen 从 Python3 中实现相同的功能时,标志 '\!' 指定在调整大小期间应忽略图像的纵横比,不起作用。

从 

我想要 

http://img1.mukewang.com/61809e900001bf6207760075.jpg

而不是开始 

http://img4.mukewang.com/61809e970001ecb307700044.jpg

从命令行这可以正常使用

convert source.png -resize 1230x80\! out_console.png

如果我从 Python3 中运行此命令,则使用


#!/usr/bin/env python3

# -*- coding: utf-8 -*-


from subprocess import Popen


cmd = [

    'convert',

    'source.png',

    '-resize',

    r'1230x80\!',       # Use '\!' ignoring the aspect ratio

    'out_subprocess.png',

    ]

proc = Popen(cmd)

proc.communicate()

结果没有调整大小:

http://img1.mukewang.com/61809eb70001cca807680031.jpg

我尝试使用r'1230x80\!'或未'1230x80\\!'成功转义反斜杠字符。


aluckdog
浏览 190回答 2
2回答

UYOU

!需要转义,因为您在 shell 中运行。但是命令本身不理解\,Popen也不使用shell(除非你使用shell=True,但避免像瘟疫一样)所以你只是过分这样做了。相反,传递参数而不引用或转义:cmd = [    'convert',    'source.png',    '-resize',    '1230x80!',    'out_subprocess.png',    ]现在你有了一个甚至可以在 Windows 上运行的便携式命令行(好吧,在 Windows 上有一个convert命令根本不做同样的事情,所以你必须指定convert命令的完整路径)

慕森王

除了公认的答案:问题本质上是:将 shell 命令转换为非 shell 命令。有一个图书馆解决了这个任务。import shlex shlex.split('convert source.png -resize 1230x80\! out_console.png')给['convert', 'source.png', '-resize', '1230x80!', 'out_console.png']
随时随地看视频慕课网APP

相关分类

Python
我要回答