将一个复杂的Shell命令发送给Python subprocess

4
我正在编写一个使用一系列复杂的Imagemagick命令的python脚本。我想知道如何调用像这样的东西...
我很容易使用subprocess调用简单命令,但我还不知道如何指定执行顺序(转义括号)。当然,我可以使用os.system或commands模块,但由于它们正在被淘汰,我肯定更喜欢使用subprocess。
1个回答

2

是的,你需要使用subprocess。你只需要把每个参数放在你传递给Popen的参数列表中的单独项中:

subprocess.Popen(['convert', '1.png', '(', '+clone', '-background', 'black', '-shadow', '110x1+9+9',
                  ')', '+swap', '-background', 'none', '-layers', 'merge', '+repage', '2.png'],
                 otherargments=values, etc=etc)

如果参数的顺序需要改变,您也可以事先构建好参数列表。

您无需对参数进行任何转义(例如,参数中包含空格或其他特殊的Shell字符“(”和“)”),因为这不会被Shell解释。


它可以工作!我想我也可以使用subprocess.call()。我没有意识到括号只会被imagemagick解释。 - pepperdreamteam
没错,如果你在子进程运行时不需要做任何事情,subprocess.call() 就可以了。很高兴我能帮到你。 - the paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接