Bir*_*ird 5 python windows subprocess imagemagick windows-7
我有一个涉及多个subprocess.call命令的python脚本.我在Mac上编写了脚本,它运行得很好.我刚尝试在Windows上运行它,我对错误感到困惑.
以下命令调用ImageMagick返回"退出状态4":
file1 = "D:/Temp/OCR_test/sample/images/crops/time_0011.png"
subprocess.call(['convert', file1, '-resize', '200%', file1])
Run Code Online (Sandbox Code Playgroud)
将命令更改为以下作品:
subprocess.call(['convert', file1, '-resize', '200%', file1], shell=True)
Run Code Online (Sandbox Code Playgroud)
shell=True由于文档中的警告,我有点担心使用.
我还需要命令在Mac和Windows上工作,我很困惑为什么它不能在Windows上工作(我检查过命令确实可以使用Windows CMD).
有趣的是,以下行脚本早期工作(其中file,lat_crop1和croplat被定义的变量):
subprocess.call(['ffmpeg', '-loglevel', 'panic', '-i', file, '-vf', lat_crop1, '-n', croplat])
Run Code Online (Sandbox Code Playgroud)
我读了这个问题并尝试了所有建议(shlex,我的命令的变化等等),但我仍然得到相同的结果.
任何人都知道如何修改该行,以便它可以无需工作shell=True?
另外,"退出状态4"是什么意思?我用Google搜索并阅读了如此多的文档但却一无所获.
编辑:根据答案中提供的信息,我更改为无法工作的命令,并subprocess.call(['mogrify', file1, '-resize', '200%', file1])在Windows上的Python中成功运行.幸运的是,ImageMagick提供mogrify了替代方案convert.
我怀疑你正在调用C:\Windows\System32\convert.exe(NTFS/FAT分区转换器)而不是imagemagick.
当shell=True路径从imagemagick中找到convert.bat或者convert.cmd脚本时,如果没有它,路径只能找到.exe文件,这是一个完全不同的程序,你得到错误4:无效参数.
在这种特殊情况下,即使使用可执行文件它也不起作用,因为"错误" convert位于系统路径中.shell=False只搜索系统路径(python subprocess Popen environment PATH?).因此,名为的程序convert位于系统路径中的运气不佳.
尝试显式添加.bat扩展名,如下所示:
subprocess.call(['convert.bat', file1, '-resize', '200%', file1])
Run Code Online (Sandbox Code Playgroud)
要知道可能运行哪些可执行文件,您可以键入:
where convert
Run Code Online (Sandbox Code Playgroud)
在命令提示符下.
在您的情况下(可执行文件),可以通过传递您要运行的可执行文件的绝对路径来解决问题.
另一种方法是将ImageMagick复制/重命名convert为imconvert.哪个程序自称convert并且不期望冲突?
或者在这种情况下,退出是合法的shell=True,并且有一个很好的评论解释说微软留下了一个令人困惑的(并且很少使用convert系统路径中的程序让我们进入)
解决方案并不漂亮,至少有一些.
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |