LINUX.ORG.RU

самый простой вариант:

import os

package = 'zip'
cmd = 'dpkg --status %s | grep "ok installed"'
present = os.system(cmd % package)
if present:
    pass

iSlava
()

Вот пример, выводящий все установленные пакеты.

#!/usr/bin/python
"""Print all installed packages"""

import apt_pkg


def main():
    """Main."""
    apt_pkg.init_config()
    apt_pkg.init_system()
    cache = apt_pkg.Cache()
    print "All installed packages:"
    for pkg in cache.packages:
        if pkg.current_state == apt_pkg.CURSTATE_INSTALLED:
            print " ", pkg.name

if __name__ == "__main__":
    main()

В общем, вы можете получить apt_pkg.Cache в переменную cache, и затем проверить установлен ли пакет так:

pkg = cache[name_of_our_package] if pkg.current_state == apt_pkg.CURSTATE_INSTALLED: print «Yes, package {0} was installed».format(pkg.name) Установите документацию к python-apt, и всё станет понятно. В документации есть более простой способ, основанный на использовании высокоуровневого apt.Cache, но он у меня не работает. Да, отлавливайте различные состояния CURSTATE(потом, что иногда пакет может быть установлен, но неправильно сконфигурирован, и т.п.) Успехов в творчестве:)

lucentcode ★★★★★
()
Последнее исправление: lucentcode (всего исправлений: 1)
Ответ на: комментарий от lucentcode

Да, сделал так:

def isPackageInstalled(package_name):
	apt_pkg.init_config()
	apt_pkg.init_system()
	return True if apt_pkg.Cache()[package_name].current_state == apt_pkg.CURSTATE_INSTALLED else False

WiseAlex
() автор топика
Ответ на: комментарий от anonymous

Да, действительно, нужно только один раз инициализировать.

WiseAlex
() автор топика
Ответ на: комментарий от anonymous

Я пишу в первую очередь для себя, потому что это мне нужно и аналогов как таковых нет.

Кому надо - поправят.

WiseAlex
() автор топика
Ответ на: комментарий от anonymous

Это мой стиль, я ему придерживаюсь и не считаю это чем-то плохим. Другое дело логически неправильный код.

WiseAlex
() автор топика
Ответ на: комментарий от WiseAlex

True, False и условные выражения не нужны, как справедливо заметил Kalashnikov. Операторы сравнения всегда возвращают bool, так что вам только надо передать полученный результат reurn. А инициализацию стоит переместить в начало приложения, что-бы вызывая свою функцию много раз, не заставлять apt_pkg каждый раз заново проводить инициализацию. Это сказывается на быстродействии вашей программы. Сам люблю набросать что-то, лишь бы работало. Но убедился, что лучше сразу делать правильно. А то где-то что-то забыл отрефакторить, и временное решение становиться постоянным...

lucentcode ★★★★★
()
Ответ на: комментарий от lucentcode

Я уже всё исправил в коде, всё уже выше сказали =)

А с True и False я действительно сфейлил =)

WiseAlex
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.