我正在做一个通过使用ImageMagick
现在,要执行命令,我正在使用python subprocess
模块,如下所示:
color_space = ...
evaluate_sequence = ...
output_file_name = ...
convert_cmd = ["magick", "convert", "-colorspace", color_space.name] + queue + \
["-evaluate-sequence", evaluate_sequence.name, output_file_name]
subprocess.call(convert_cmd)
我最近了解到ImageMagick
有Python包装器。特别是,我正在调查MagickWand
。
重构代码以在性能,安全性等方面不使用子流程模块是否有很大的好处?
与使用MagickWand
之类的子流程相比,我认为子流程的调用更具可读性/简单性,但是如果我想切换还有其他好处。
答案 0 :(得分:2)
是否应尽可能避免使用subprocess.Popen和subprocess.call?
不值得。您共享的代码是直接任务,您已经在python中以清晰易读的方式进行了模板化。为什么要将一项快速任务的解决方案复杂化,使其具有更多的依赖性和复杂性。 convert
实用程序今天也为您工作,但明天可能会有另一个外部实用程序。
重构代码以在性能,安全性等方面不使用子流程模块是否有很大的好处?
我认为这是通过不调用系统调用而对性能的最小好处,但是包括一个动态加载共享库的C-API包装器模块也差不多。另外,根据委托,ImageMagick本身可能会调用系统调用。
为了安全起见,无论哪种方式,您的应用程序仍然负责清理变量。我也建议...
subprocess.call
不能被外部资源访问。 (即,如果解决方案在Web服务器上,则将任务移至远程队列工作器)切换参数
我能想到的常见理由...
同样,您确实没有论据证明切换是合理的。至少今天没有。