Python:所有Subprocess调用上的“FileNotFoundError”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:所有Subprocess调用上的“FileNotFoundError”相关的知识,希望对你有一定的参考价值。

使用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:ProgramsPython 3.5.1libsubprocess.py", line 629, in check_output
    **kwargs).stdout
File "D:ProgramsPython 3.5.1libsubprocess.py", line 696, in run
    with Popen(*popenargs, **kwargs) as process:
File "D:ProgramsPython 3.5.1libsubprocess.py", line 950, in __init__
    restore_signals, start_new_session)
File "D:ProgramsPython 3.5.1libsubprocess.py", line 1220, in _execute_child
    startupinfo)

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

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

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

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

答案

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

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

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

注意:使用shell=True也会使它碰巧工作,但我不建议那样解决它,因为(1)你的PATH分辨率实际上是一个副作用(你将隐藏依赖于PATH的值运行时),和(2)有security concerns

以上是关于Python:所有Subprocess调用上的“FileNotFoundError”的主要内容,如果未能解决你的问题,请参考以下文章

粘包问题,以及在python中如何调用操作系统命令

Python调用linux系统命令--使用subprocess模块

Python 调用外部命令:subprocess 模块

socket实现在python中调用操作系统的命令(subprocess)

使用 subprocess.Popen 启动 pyuic5

python使用subprocess及delegator调用第三方程序