Querying installed package is something I do every now and then. It’s usually needed to find out if all the necessary dependencies of a package have been met. On Slackware it is usually accomplished with a simple:
ls /var/log/packages | grep -i package
For example:
$ ls /var/log/packages | grep -i gconf
GConf-2.32.1-x86_64-1
perl-extutils-pkgconfig-1.12-x86_64-1_SBo
GConf-2.32.1-x86_64-1
perl-extutils-pkgconfig-1.12-x86_64-1_SBo
As a way of practising programming, I decided to simulate the above command in Python 3. Here’s what I’ve coded:
#!/usr/bin/env python3
import glob, os, sys
if len(sys.argv) != 2:
'''Check if the user provided the required argument'''
print('The {0} command takes exactly 1 argument!'.format(sys.argv[0]))
else:
packages_directory = '/var/log/packages/'
package = sys.argv[1].lower()
for files in glob.glob(packages_directory + '*' + package + '*'):
print(os.path.basename(files))
It might be slightly slower than using Bash but it does the job. As I’m not a seasoned Python programmer, there’ll probably be ways of optimising the code, which I obviously welcome. Feel free to provide feedback.
Hi, just wanted to note, that parentheses around the condition of if-statement aren’t necessary in Python and are even considered a bad style.
Also, what you’re doing with
and
module (in fact, they’re implemented in a similar way). That won’t make your code run faster, but it’ll sure be smaller and simpler.
Thanks for your feedback, Audrius.
I have adjusted the code. It is more concise now. As I said, I am not an experienced Python programmer so don’t hesitate to leave more comments.
cheers
Marcin