无法将参数传递给 subprocess.call
Having trouble passing arguments to subprocess.call
我在使用此 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!'"
参数一定有问题。
运行 你的代码,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!"
。如果这不起作用,您将必须提供有关回溯的更多详细信息。
!
是shell中的元字符;您可能需要转义它,例如,如果您 运行 通过 shell 包含它的命令,则使用单引号。
subprocess.call
默认不调用shell因此你不需要转义!
,而且你应该删除不必要的单引号(没有shell 将它们从参数中删除)。
您可以使用 shlex.split()
查看如何将 shell 命令(字符串)转换为可以传递给 subprocess.call
的命令参数列表:
>>> import shlex
>>> shlex.split("echo 'abc!'")
['echo', 'abc!'] #NOTE: no embed quotes
我在使用此 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!'"
参数一定有问题。
运行 你的代码,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!"
。如果这不起作用,您将必须提供有关回溯的更多详细信息。
!
是shell中的元字符;您可能需要转义它,例如,如果您 运行 通过 shell 包含它的命令,则使用单引号。
subprocess.call
默认不调用shell因此你不需要转义!
,而且你应该删除不必要的单引号(没有shell 将它们从参数中删除)。
您可以使用 shlex.split()
查看如何将 shell 命令(字符串)转换为可以传递给 subprocess.call
的命令参数列表:
>>> import shlex
>>> shlex.split("echo 'abc!'")
['echo', 'abc!'] #NOTE: no embed quotes