2010-08-02 46 views
13

Có cách thanh lịch và giống Python hơn để kiểm tra xem gói có được cài đặt trên Debian không?Kiểm tra xem gói có được cài đặt

Trong một kịch bản bash, tôi muốn làm:

dpkg -s packagename | grep Status 

Gợi ý làm như vậy trong một kịch bản Python?

Xin cảm ơn,

Trả lời

1

Hãy xem commands. Nó rất hữu ích cho việc chạy mọi thứ trên dòng lệnh và nhận trạng thái.

Nếu không, tôi chắc chắn có một số thư viện sẽ cho phép bạn tương tác với apt. python-apt có thể hoạt động nhưng hơi thô. Chỉ cần nắm bắt dòng lệnh có vẻ dễ dàng hơn.

3

Nếu bạn đang kiểm tra sự tồn tại của một gói cài đặt một module Python, bạn có thể kiểm tra này từ bên trong một kịch bản Python phụ thuộc - cố gắng nhập và xem nếu bạn nhận được một ngoại lệ:

import sys 
try: 
    import maybe 
except ImportError: 
    print "Sorry, must install the maybe package to run this program." 
    sys.exit(1) 
+2

Đây không phải là các gói mà OP đang tìm kiếm. Các gói Python và các gói của trình quản lý gói Debian là (phần lớn) các thứ khác nhau. Xem: http://en.wikipedia.org/wiki/Dpkg – Oli

+0

Vâng, OP đã hỏi nếu có một cách từ bên trong một kịch bản Python, vì vậy tôi không nghĩ rằng đó là quá xa một bước nhảy vọt để nghĩ rằng ông đang tìm kiếm cho một cách để phát hiện sự phụ thuộc vào mô-đun Python. Tuy nhiên, điểm lấy, tôi hy vọng tôi đã đủ điều kiện đúng câu trả lời của tôi. – PaulMcG

+2

Google đã gửi cho tôi ở đây để tìm kiếm câu trả lời này, vì vậy nó được đánh giá cao. – noah

1

một chút đẹp hơn, phiên bản hy vọng thành ngữ ví dụ bash của bạn:

import os, subprocess 
devnull = open(os.devnull,"w") 
retval = subprocess.call(["dpkg","-s","coreutils"],stdout=devnull,stderr=subprocess.STDOUT) 
devnull.close() 
if retval != 0: 
    print "Package coreutils not installed." 
12

Đây là một cách pythonic:

import apt 
cache = apt.Cache() 
if cache['package-name'].is_installed: 
    print "YES it's installed" 
else: 
    print "NO it's NOT installed" 
+0

Câu trả lời hay nhất – jsj

+0

Bạn sẽ gặp lỗi chính trong trường hợp gói chưa được cài đặt. Có một cách khác để làm điều đó mà sẽ bắt được điều này và cung cấp một đầu ra neater nếu gói không được tìm thấy. Tôi sẽ đăng bài này như một bình luận cho OP. –

0

Tôi cần một giải pháp tương thích đa nền tảng nên tôi đã sử dụng which.

import subprocess 
retval = subprocess.call(["which", "packagename"]) 
if retval != 0: 
    print("Packagename not installed!") 

Mặc dù câu trả lời ở trên không hoạt động trên hầu hết các nền tảng.

0

Đây là một số mã sẽ cung cấp cho bạn một cách gọn gàng để hiển thị nếu gói được cài đặt hay không (không kích hoạt thông báo lỗi lộn xộn trên màn hình). Tuy nhiên, điều này chỉ hoạt động trong Python 3.

import apt 
cache = apt.Cache() 
cache.open() 

response = "Package Installed." 
try: 
    cache['notapkg'].is_installed 
except KeyError: 
    response = "Package Not Installed." 

print(response) 
Các vấn đề liên quan