Найти - Пользователи
Полная версия: Поиск директории сторонней программы
Начало » Python для новичков » Поиск директории сторонней программы
1 2
Ashedu
Доброго времени суток, форумчане.

Как проверить установлена ли программа в системе по имени?
Как получить рабочую директорию это программы если она установлена?
Faer
Используйте функцию прохода по каталогам:
for (x,y,z) in os.walk('C:\\'):

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

Что за система то?
Ashedu
Faer
Используйте функцию прохода по каталогам:
Спасибо, метод рабочий, но проход слишком долгий…
lorien
Что за система то?
Поиск будет выполняться по Windows, любой разрядности
lorien
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
Ashedu
lorien
Изучайт MSND и гугл на предмет, как получить список установленных программ из реестра, к питону эта проблема не имеет отношения. Поищите тут ещё http://code.activestate.com/recipes/langs/python/ ну и на stackoverflow
Да, есть там класс wmi, через него можно дернуть. Но инициализация этого класса медленная жуть, секунд 8. Так что пытаюсь найти альтернативу.
sanodin
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"
doza_and
Для 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
lorien
Код просто жесть, почитайте про pep-8.
doza_and
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 *
:( сожрал
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB