python subprocess 路徑錯(cuò)誤解決

使用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=Falseshell=True,使用shell來(lái)執(zhí)行程序


參考:https://www.cnblogs.com/jqpy1994/p/10135924.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容