subprocess.run()执行ebsynth命令报错:unrecognized option 'output.png'
问题原因及解决方法
问题根源
- 参数拆分错误:
-guide选项需要接收两个独立的文件路径参数,但你将source_segment.png和target_segment.png合并为单个字符串元素,subprocess会把这个合并后的字符串当作一个参数传递给ebsynth。这导致ebsynth无法正确识别参数结构,误将后续的output.png判定为未知选项,从而抛出error: unrecognized option 'output.png'。 - shell=True的参数传递冲突:当使用
shell=True时,若以列表形式传递参数,Windows系统的cmd会以非预期的逻辑拼接参数,进一步打乱了ebsynth的参数解析流程。
解决方法
方法1:拆分独立参数(推荐)
移除shell=True,将每个命令行参数拆分为列表的独立元素,包括-guide后的两个文件名:
import subprocess process = subprocess.run([ 'ebsynth', '-style', 'source_photo.png', '-guide', 'source_segment.png', 'target_segment.png', '-output', 'output.png' ], cwd=dir)
这种方式让subprocess直接传递每个独立参数,ebsynth能准确解析-guide所需的两个路径。
方法2:使用完整命令字符串(保留shell=True)
如果必须保留shell=True,将整个命令写成单个字符串传递:
import subprocess cmd = "ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png" process = subprocess.run(cmd, shell=True, cwd=dir)
此时shell会按照cmd的规则拆分参数,和你手动在cmd中执行的效果完全一致。
内容的提问来源于stack exchange,提问作者Meet Gondaliya
相关产品推荐
相关产品推荐

