【问题标题】:Python: "FileNotFoundError" on all Subprocess callsPython:所有子进程调用上的“FileNotFoundError”
【发布时间】:2018-05-30 12:48:56
【问题描述】:

使用 Windows 7、Python 3.5.1:

import subprocess
subprocess.check_output(['echo', 'hello'])

引发错误:

Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
    subprocess.check_output(['echo', 'hello'])
File "D:\Programs\Python 3.5.1\lib\subprocess.py", line 629, in check_output
    **kwargs).stdout
File "D:\Programs\Python 3.5.1\lib\subprocess.py", line 696, in run
    with Popen(*popenargs, **kwargs) as process:
File "D:\Programs\Python 3.5.1\lib\subprocess.py", line 950, in __init__
    restore_signals, start_new_session)
File "D:\Programs\Python 3.5.1\lib\subprocess.py", line 1220, in _execute_child
    startupinfo)

FileNotFoundError: [WinError 2] The system cannot find the file specified

所有子进程调用都会出现此错误,例如 subprocess.run、subprocess.call 和 subproccess.Popen。无论使用什么命令,都会发生同样的错误:

subprocess.check_output(['['D:\path\to\exe\program.exe', 'argument'])
FileNotFoundError: [WinError 2] The system cannot find the file specified

据我所知,此错误通常发生在命令尝试执行不存在的路径时,但我无法确定为什么会在这些情况下发生。

【问题讨论】:

  • 它没有找到二进制文件echo。如果你想要一个路径解析机制,你应该设置shell=True
  • @WillemVanOnsem 这似乎解决了问题。谢谢

标签: python python-3.x subprocess


【解决方案1】:

您需要包含可执行文件的完整路径。例如,

import subprocess
subprocess.check_output(['/bin/echo', 'hello'])

(但不确定它在 Windows 上的确切位置。)

注意:使用shell=True 也可以使其正常工作,但我不建议以这种方式解决它,因为 (1) 你的PATH 分辨率实际上是一个副作用(你会有一个隐藏的依赖于PATH在运行时的值),以及(2)有security concerns

【讨论】:

  • 在 Windows OP 中使用,echo 是一个命令,而不是一个可执行程序,因此它可能没有它的路径。因此,如果没有 shell=True,您的方法可能无法在 Windows 中工作
猜你喜欢
  • 2019-05-06
  • 2017-08-22
  • 1970-01-01
  • 2020-03-16
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多