2012-06-22 1 views
0

나는 코드를 실행할 시스템에 설치된 소프트웨어 목록을 찾으려면 초보자 파이썬 코드를 작성하고 있습니다. 소프트웨어가 설치되어 있지 않다면, 나는 그것을 사용자에게 말할 계획이다. (때 dpkg -l)더 나은 방법은 파이썬 코드를 사용하여 출력에서 ​​데이터를 추출하는 것입니다

A snippet below: 
---------------- 

ii git         1:1.7.9.5-1        fast, scalable, distributed revision control system 
ii git-man        1:1.7.9.5-1        fast, scalable, distributed revision control system (manual pages) 


c = subprocess.Popen(['dpkg','-l'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
list_of_packages,error = c.communicate() 
for item in list_of_packages.split('\n'): 
    print item.split('ii')[-1] 

분할하고 내가 필요한 데이터를 얻기 위해 몇 가지 더 분할을 적용해야 할 것 같은데 :

출력은 다음과 같이 될 것입니다. git 및 1.7.9.5 (버전 이름).

저는 이것을 달성하는 더 좋은 방법이 있는지 알아 내려고하고 있습니다.

하시기 바랍니다 조언 ..

감사합니다, -Vijay

답변

0

dpkg -l 출력 라인은 ii을 포함하지 않는. 그리고 아마도 이름에 ii을 포함하는 패키지가 있습니다.

for item in list_of_packages.splitlines(): 
    if item.startswith('ii'): 
     print item[4:] 
5

당신이 관찰 한 바와 같이 사람이 읽을 수있는 출력이 약해 구문 분석을 시도 :

나는 이런 식으로 할 것이다. 다행히도 dpkg -l으로 대체 할 수 있습니다. dpkg-query -W -f='${Package}\t${Version}\n'은 기계 가독 출력을 제공하도록 설계되었습니다. dpkg-query에 대한 전체 옵션 목록은 http://manpages.ubuntu.com/manpages/lucid/man1/dpkg-query.1.html을 참조하십시오.

>>> args = ["dpkg-query", "-W", "-f=${Package}\t${Version}\n"] 
>>> out, err = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 
>>> print out #output is summarized, clearly 
git  1:1.7.9.5-1 
git-man 1:1.7.9.5-1 
+0

+1 파이썬이 필요하지 않고 입력을 잘 조정하십시오. – eumiro

+0

입력 해 주셔서 감사합니다.하지만 사용법을 알기가 힘듭니다. c = subprocess.Popen ([ 'dpkg-query -W -f = \'$ {Package} \ t $ {버전} \ n \ ''], stdout = subprocess.PIPE, stderr = subprocess.PIPE) 나를 위해 일한다. – user596922

관련 문제