使用Python的 pygifsicle
壓縮GIF圖片時收到錯誤
Traceback (most recent call last):
File "main.py", line 9, in <module>
optimize(path)
File "D:\Python3.7.5\lib\site-packages\pygifsicle\pygifsicle.py", line 64, in optimize
gifsicle(source, *args, **kwargs, optimize=True)
File "D:\Python3.7.5\lib\site-packages\pygifsicle\pygifsicle.py", line 53, in gifsicle
str(colors), "--output", destination])
File "D:\Python3.7.5\lib\subprocess.py", line 339, in call
with Popen(*popenargs, **kwargs) as p:
File "D:\Python3.7.5\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "D:\Python3.7.5\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 系統(tǒng)找不到指定的文件褐澎。
根據(jù)報錯信息可以推斷
optimize() -> gifsicle() -> call() -> __init__() -> _execute_child()
分別查看函數(shù),發(fā)現(xiàn)call()
用于運行命令筹淫,上網(wǎng)查找關(guān)于 subprocess.py
call函數(shù)
的相關(guān)信息喷斋。
發(fā)現(xiàn):
錯誤原因:
默認情況下悍募,subprocess模塊
直接fork子進程來執(zhí)行需要運行的程序庸推,而不是使用shell
來執(zhí)行程序常侦,但subprocess模塊
在Windows環(huán)境中開啟子進程中需要使用echo
,但echo
不是單獨的可執(zhí)行文件贬媒,是Windows命令行的內(nèi)置命令聋亡,所以執(zhí)行echo
需要使用到命令行,也就是shell
际乘,當(dāng)subprocess模塊
把echo
當(dāng)作獨立程序來處理時候杀捻,是找不到echo
這個程序的,所以報了
FileNotFoundError: [WinError 2] 系統(tǒng)找不到指定的文件蚓庭。
錯誤
解決方案:
修改subprocess
中類Popen
的__init__()
的參數(shù)shell=False
為shell=True
,使用shell
來執(zhí)行程序