3 回答
TA贡献1796条经验 获得超4个赞
我想到的最简单的方法:
def which(program):
import os
def is_exe(fpath):
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
fpath, fname = os.path.split(program)
if fpath:
if is_exe(program):
return program
else:
for path in os.environ["PATH"].split(os.pathsep):
exe_file = os.path.join(path, program)
if is_exe(exe_file):
return exe_file
return None
编辑:更新了代码示例,以包括用于处理逻辑的情况,其中所提供的参数已经是可执行文件的完整路径,即“ which / bin / ls”。这模仿了UNIX“哪个”命令的行为。
编辑:更新为每个注释使用os.path.isfile()而不是os.path.exists()。
编辑:path.strip('"')似乎在这里做错了。Windows和POSIX都似乎不鼓励引用PATH项目。
TA贡献1829条经验 获得超6个赞
我知道这是一个古老的问题,但是您可以使用distutils.spawn.find_executable。自python 2.4起已被记录下来,自python 1.6起就已存在。
import distutils.spawn
distutils.spawn.find_executable("notepad.exe")
此外,Python 3.3现在提供了shutil.which()。
添加回答
举报