1

コードを実行するシステムにインストールされているソフトウェアのリストを見つけるために、初心者のpythonコードを書いています。ソフトウェアがインストールされていない場合は、ユーザーにその旨を伝える予定です。

出力は次のようになります: (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(バージョン名)。

これを達成するためのより良い方法があるかどうかを理解しようとしています。

ご意見をお聞かせください..

ありがとう、ビジェイ

4

2 に答える 2

6

あなたが観察したように、人間が読める出力を解析しようとするのは脆弱です。幸いなことに、機械可読な出力を生成するように設計された which にdpkg -l置き換えることができます。へのオプションの完全なリストについては、 http://manpages.ubuntu.com/manpages/lucid/man1/dpkg-query.1.htmldpkg-query -W -f='${Package}\t${Version}\n'を参照してください。dpkg-query

>>> 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
于 2012-06-22T07:16:13.433 に答える
0

dpkg -lを含まない行を出力しますiiiiまた、名前に含まれるパッケージが存在する可能性があります。

私はこのようにします:

for item in list_of_packages.splitlines():
    if item.startswith('ii'):
        print item[4:]
于 2012-06-22T07:15:58.670 に答える