为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2021-11-02 10:11:41
我想使用“转换”来调整多个图像的大小。这在命令行中非常有效。但是,当我尝试使用 subprocess.Popen 从 Python3 中实现相同的功能时,标志 '\!' 指定在调整大小期间应忽略图像的纵横比,不起作用。从 我想要 而不是开始 从命令行这可以正常使用convert source.png -resize 1230x80\! out_console.png如果我从 Python3 中运行此命令,则使用#!/usr/bin/env python3# -*- coding: utf-8 -*-from subprocess import Popencmd = [    'convert',    'source.png',    '-resize',    r'1230x80\!',       # Use '\!' ignoring the aspect ratio    'out_subprocess.png',    ]proc = Popen(cmd)proc.communicate()结果没有调整大小:我尝试使用r'1230x80\!'或未'1230x80\\!'成功转义反斜杠字符。
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

!需要转义,因为您在 shell 中运行。但是命令本身不理解\,Popen也不使用shell(除非你使用shell=True,但避免像瘟疫一样)


所以你只是过分这样做了。


相反,传递参数而不引用或转义:


cmd = [

    'convert',

    'source.png',

    '-resize',

    '1230x80!',

    'out_subprocess.png',

    ]

现在你有了一个甚至可以在 Windows 上运行的便携式命令行(好吧,在 Windows 上有一个convert命令根本不做同样的事情,所以你必须指定convert命令的完整路径)


查看完整回答
反对 回复 2021-11-02
?
慕森王

TA贡献1777条经验 获得超3个赞

除了公认的答案:问题本质上是:

将 shell 命令转换为非 shell 命令。

有一个图书馆解决了这个任务。

import shlex
shlex.split('convert source.png -resize 1230x80\! out_console.png')

['convert', 'source.png', '-resize', '1230x80!', 'out_console.png']


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信