如何在Python中找到可执行文件的位置?

Hoj*_*olf 9 python executable path

在 Python 中识别可执行文件的最佳方法是什么?

我发现以下函数会找到记事本可执行文件

from shutil import which
which('notepad')
Run Code Online (Sandbox Code Playgroud)
from shutil import which
which('notepad')
Run Code Online (Sandbox Code Playgroud)

另一种方法来做到这一点。

from distutils import spawn
spawn.find_executable('notepad')
Run Code Online (Sandbox Code Playgroud)
Out[32]: 'C:\\Windows\\system32\\notepad.EXE'
Run Code Online (Sandbox Code Playgroud)

虽然这两种方法都适用于记事本,但我似乎无法让它们找到其他可执行文件,例如vlc.exegimp-2.10.exe或其他文件。在计算机上查找可执行文件的更好方法是什么?

Far*_*eed 3

这是独立于平台的有效方法:

import subprocess
import os
import platform

def is_tool(name):
    try:
        devnull = open(os.devnull)
        subprocess.Popen([name], stdout=devnull, stderr=devnull).communicate()
    except OSError as e:
        if e.errno == os.errno.ENOENT:
            return False
    return True

def find_prog(prog):
    if is_tool(prog):
        cmd = "where" if platform.system() == "Windows" else "which"
        return subprocess.call([cmd, prog])
Run Code Online (Sandbox Code Playgroud)

  • `popen` 将执行一个过程,这可能不是所需的行为,导致创建日志文件、加载依赖库和其他事情。 (4认同)