美文网首页
python subprocess 路径错误解决

python subprocess 路径错误解决

作者: MangfuStudio | 来源:发表于2020-02-01 16:52 被阅读0次

    使用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] 系统找不到指定的文件。
    

    根据报错信息可以推断

    optimize() -> gifsicle() -> call() -> __init__() ->  _execute_child()
    

    分别查看函数,发现call() 用于运行命令,上网查找关于 subprocess.py call函数 的相关信息。

    发现:

    错误原因:
    默认情况下,subprocess模块直接fork子进程来执行需要运行的程序,而不是使用shell来执行程序,但subprocess模块在Windows环境中开启子进程中需要使用 echo,但echo不是单独的可执行文件,是Windows命令行的内置命令,所以执行echo需要使用到命令行,也就是 shell ,当subprocess模块echo当作独立程序来处理时候,是找不到echo这个程序的,所以报了
    FileNotFoundError: [WinError 2] 系统找不到指定的文件。错误

    解决方案:
    修改 subprocess 中类Popen__init__() 的参数shell=Falseshell=True,使用shell来执行程序


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

    相关文章

      网友评论

          本文标题:python subprocess 路径错误解决

          本文链接:https://www.haomeiwen.com/subject/ivkxxhtx.html