向python子进程发送复杂的shell命令

向python子进程发送复杂的shell命令,python,python-3.x,subprocess,python-2.7,Python,Python 3.x,Subprocess,Python 2.7,我正在编写一个脚本,在python中使用一系列复杂的Imagemagick命令。 我想知道怎么称呼这样的事情 convert 1.png\(+clone-background black-shadow 110x1+9+9\)+swap-background none-layers merge+repage 2.png 我很乐意使用子流程调用简单命令,但我还不知道如何指定执行顺序(转义括号) 当然,我可以使用os.system或commands模块,但由于这些都离开了语言,我肯定更喜欢使用subp

我正在编写一个脚本,在python中使用一系列复杂的Imagemagick命令。 我想知道怎么称呼这样的事情

convert 1.png\(+clone-background black-shadow 110x1+9+9\)+swap-background none-layers merge+repage 2.png

我很乐意使用子流程调用简单命令,但我还不知道如何指定执行顺序(转义括号)


当然,我可以使用os.system或commands模块,但由于这些都离开了语言,我肯定更喜欢使用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字符,如“(“and”)”),因为这不会被shell解释。

它可以工作!我想我也可以使用subprocess.call(),我没有意识到括号只会由imagemagick解释。是的,subprocess.call()可以在子流程运行时不需要执行任何操作。很高兴我能帮忙。