Форум сайта python.su
0
Доброго времени суток, форумчане.
Как проверить установлена ли программа в системе по имени?
Как получить рабочую директорию это программы если она установлена?
Офлайн
3
Используйте функцию прохода по каталогам:
for (x,y,z) in os.walk('C:\\'):
Отредактировано Faer (Сен. 11, 2013 11:34:22)
Офлайн
> Как проверить установлена ли программа в системе по имени?
Что за система то?
Офлайн
0
FaerСпасибо, метод рабочий, но проход слишком долгий…
Используйте функцию прохода по каталогам:
lorienПоиск будет выполняться по Windows, любой разрядности
Что за система то?
Отредактировано Ashedu (Сен. 11, 2013 12:58:52)
Офлайн
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
Офлайн
0
lorienДа, есть там класс wmi, через него можно дернуть. Но инициализация этого класса медленная жуть, секунд 8. Так что пытаюсь найти альтернативу.
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
Офлайн
31
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"
Отредактировано sanodin (Сен. 11, 2013 18:11:30)
Офлайн
253
Для Unix не проблема
http://putty.org.ru/articles/unix-linux-ref.html
whereis halt — показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу ‘halt’
which halt — отображает полный путь к файлу 'halt
Ниже грубая имитация на python
#! /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
Офлайн
Код просто жесть, почитайте про pep-8.
Офлайн
253
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 *
Отредактировано doza_and (Сен. 11, 2013 21:56:59)
Офлайн