我遇到了这个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!'"
参数存在问题。
答案 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