3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
我想到的最簡(jiǎn)單的方法:
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
編輯:更新了代碼示例,以包括用于處理邏輯的情況,其中所提供的參數(shù)已經(jīng)是可執(zhí)行文件的完整路徑,即“ which / bin / ls”。這模仿了UNIX“哪個(gè)”命令的行為。
編輯:更新為每個(gè)注釋使用os.path.isfile()而不是os.path.exists()。
編輯:path.strip('"')似乎在這里做錯(cuò)了。Windows和POSIX都似乎不鼓勵(lì)引用PATH項(xiàng)目。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
我知道這是一個(gè)古老的問題,但是您可以使用distutils.spawn.find_executable。自python 2.4起已被記錄下來,自python 1.6起就已存在。
import distutils.spawn
distutils.spawn.find_executable("notepad.exe")
此外,Python 3.3現(xiàn)在提供了shutil.which()。
添加回答
舉報(bào)