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

正如您所观察到的,尝试解析人类可读的输出是脆弱的。幸运的是,您可以将其替换dpkg -ldpkg-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输出不包含ii. 并且可能包含ii在他们的名字中的包。

我会这样做:

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