Доброго времени суток, форумчане.
Как проверить установлена ли программа в системе по имени?
Как получить рабочую директорию это программы если она установлена?
for (x,y,z) in os.walk('C:\\'):
FaerСпасибо, метод рабочий, но проход слишком долгий…
Используйте функцию прохода по каталогам:
lorienПоиск будет выполняться по Windows, любой разрядности
Что за система то?
lorienДа, есть там класс wmi, через него можно дернуть. Но инициализация этого класса медленная жуть, секунд 8. Так что пытаюсь найти альтернативу.
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
from _winreg import * aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE) aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall") for i in range(1024): try: keyname = EnumKey(aKey, i) print keyname except WindowsError: break
"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
#! /usr/bin/env python # Variant of "which". # On stderr, near and total misses are reported. # '-l<flags>' argument adds ls -l<flags> of each file found. import sys if sys.path[0] in (".", ""): del sys.path[0] import sys import os from stat import * def Name(fil, first=1): u""" search file name for given executable """ if first: return Names([fil])[0] else: return Names([fil]) def Names(fils): u""" search file name for executables list """ pathlist = os.environ['PATH'].split(os.pathsep) sts = 0 res = [] for prognm in fils: ident = () drb, prog = os.path.split(prognm) if drb: if os.path.exists(prognm): res.append(os.path.abspath(prognm)) else: for dr in pathlist: filename = os.path.join(dr, prog) try: st = os.stat(filename) except os.error: continue if not S_ISREG(st[ST_MODE]): raise LookupError(filename + ': not a disk file') else: mode = S_IMODE(st[ST_MODE]) if mode & 0111: if not ident: # print filename res.append(filename) ident = st[:3] else: if st[:3] == ident: s = 'same as: ' else: s = 'also: ' res.append(filename) else: raise LookupError(filename + ': not executable') return res if __name__ == '__main__': for i in sys.argv[1:]: res = Name(i) print res
lorienЛюбопытная идея. Прогнал код через autopep8 Изменений нет - т.е. по большей части формально соответствует. Если есть предложения как изменить их и выкладывайте, с удовольствием применю и другим будет полезно.
почитайте про pep-8.
#! /usr/bin/env python # Variant of "which". # On stderr, near and total misses are reported. # '-l<flags>' argument adds ls -l<flags> of each file found. import sys if sys.path[0] in (".", ""): del sys.path[0] import sys import os from stat import *