使用Python的 pygifsicle 壓縮GIF圖片時(shí)收到錯(cuò)誤
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ù)報(bào)錯(cuò)信息可以推斷
optimize() -> gifsicle() -> call() -> __init__() -> _execute_child()
分別查看函數(shù),發(fā)現(xiàn)call() 用于運(yùn)行命令,上網(wǎng)查找關(guān)于 subprocess.py call函數(shù) 的相關(guān)信息。

發(fā)現(xiàn):
錯(cuò)誤原因:
默認(rèn)情況下,subprocess模塊直接fork子進(jìn)程來(lái)執(zhí)行需要運(yùn)行的程序,而不是使用shell來(lái)執(zhí)行程序,但subprocess模塊在Windows環(huán)境中開(kāi)啟子進(jìn)程中需要使用echo,但echo不是單獨(dú)的可執(zhí)行文件,是Windows命令行的內(nèi)置命令,所以執(zhí)行echo需要使用到命令行,也就是shell,當(dāng)subprocess模塊把echo當(dāng)作獨(dú)立程序來(lái)處理時(shí)候,是找不到echo這個(gè)程序的,所以報(bào)了
FileNotFoundError: [WinError 2] 系統(tǒng)找不到指定的文件。錯(cuò)誤
解決方案:
修改subprocess中類(lèi)Popen的__init__()的參數(shù)shell=False為shell=True,使用shell來(lái)執(zhí)行程序

