无法将参数传递给subprocess.call

时间:2015-01-24 23:22:46

标签: python subprocess

我遇到了这个python子程序的问题...

def make_1024 ( src, tgt ):
    print "/usr/bin/convert %s -background none -gravity center -extent '1024x500!' %s" % ( src, tgt )
    rc = call ( ["/usr/bin/convert", src, "-background",  "none",  "-gravity", "center", "-extent", "'1024x500!'", tgt] )
    print "rc is %d" % rc

...我得到的输出是......

rc is 1

...并且没有创建1024x500文件。我无法弄清楚为什么。我怀疑"'1024x500!'"参数存在问题。

2 个答案:

答案 0 :(得分:2)

运行代码,imagemagick提供回溯:

convert: invalid argument for option `-extent': '1024x500!' @ error/convert.c/ConvertImageCommand/1429.

这是您在范围值

周围加上的引号
from subprocess import call

def make_1024 ( src, tgt ):
    print "/usr/bin/convert %s -background none -gravity center -extent 1024x500! %s" % ( src, tgt )
    rc = call ( ["/usr/bin/convert", src, "-background",  "none",  "-gravity", "center", "-extent", "1024x500!", tgt] )
    print "rc is %d" % rc

if __name__ == "__main__":
  make_1024(src="usage.jpg", tgt="test.jpg")

更具体地说,-extent "'1024x500!'""1024x500!"。如果这不起作用,您将不得不提供有关追溯的更多细节。

答案 1 :(得分:1)

!是shell中的元字符;您可能需要转义它,例如,如果您通过shell运行包含它的命令,则使用单引号。

默认情况下,

subprocess.call不会调用shell,因此您不需要转义!,而且您应该删除不必要的单引号(没有shell可以从参数中删除它们) )。

您可以使用shlex.split()查看如何将shell命令(字符串)转换为可以传递给subprocess.call的命令参数列表:

>>> import shlex
>>> shlex.split("echo 'abc!'")
['echo', 'abc!'] #NOTE: no embed quotes