Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 11, 2013 09:50:16

Ashedu
Зарегистрирован: 2012-11-23
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

Доброго времени суток, форумчане.

Как проверить установлена ли программа в системе по имени?
Как получить рабочую директорию это программы если она установлена?

Офлайн

#2 Сен. 11, 2013 11:32:55

Faer
Зарегистрирован: 2013-08-25
Сообщения: 25
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

Используйте функцию прохода по каталогам:

for (x,y,z) in os.walk('C:\\'):

x - каталог, y - список файлов, сидящих в этом каталоге, z - список подкаталогов каталога x.
Имя лучше проверяйте через оператор in.

Отредактировано Faer (Сен. 11, 2013 11:34:22)

Офлайн

#3 Сен. 11, 2013 11:53:57

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск директории сторонней программы

> Как проверить установлена ли программа в системе по имени?

Что за система то?

Офлайн

#4 Сен. 11, 2013 12:57:56

Ashedu
Зарегистрирован: 2012-11-23
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

Faer
Используйте функцию прохода по каталогам:
Спасибо, метод рабочий, но проход слишком долгий…
lorien
Что за система то?
Поиск будет выполняться по Windows, любой разрядности

Отредактировано Ashedu (Сен. 11, 2013 12:58:52)

Офлайн

#5 Сен. 11, 2013 14:22:59

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск директории сторонней программы

Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow

Офлайн

#6 Сен. 11, 2013 16:41:23

Ashedu
Зарегистрирован: 2012-11-23
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

lorien
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
Да, есть там класс wmi, через него можно дернуть. Но инициализация этого класса медленная жуть, секунд 8. Так что пытаюсь найти альтернативу.

Офлайн

#7 Сен. 11, 2013 17:33:49

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

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)

Офлайн

#8 Сен. 11, 2013 19:47:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

Для 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



Офлайн

#9 Сен. 11, 2013 20:52:11

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск директории сторонней программы

Код просто жесть, почитайте про pep-8.

Офлайн

#10 Сен. 11, 2013 21:48:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Поиск директории сторонней программы

lorien
почитайте про pep-8.
Любопытная идея. Прогнал код через autopep8 Изменений нет - т.е. по большей части формально соответствует. Если есть предложения как изменить их и выкладывайте, с удовольствием применю и другим будет полезно.

p.s.
пустые строки которые отделяют функции импорты и прочее похоже жрутся при отображении на сайте
пробую с пустыми строками:
#! /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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version