diff --git a/sit-list-installed.py b/sit-list-installed.py new file mode 100755 index 0000000..3ecefd7 --- /dev/null +++ b/sit-list-installed.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# +# Script to find out the versions of installed software modules +# +# Christoph Niethammer Copyright 2011 +# + +import os +import sys +import subprocess +import shlex + +import re +import string + +def module_cmd( cmd ) : + m = subprocess.Popen('module ' + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + return m.communicate() + +def find_module_versions( module = "" ) : + m = subprocess.Popen('module av -l ' + module, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout_data, stderr_data = m.communicate() + mlist = stderr_data + mregex = "^"+module+"/(\S*)\s+.+\Z" + versions=[] + for m in mlist.split("\n") : + m_version = re.findall(mregex, m) + if m_version : + versions.append(m_version[0]) + return versions + +def find_modules() : + modules = set() + stdout_data, stderr_data = module_cmd( "av -l") + mlist = stderr_data + mregex = "^(\w\S*/\S+)/\S+\s+.+\Z" + for m in mlist.split("\n") : + module = re.findall(mregex, m) + if module : + modules.add(module[0]) + return list(modules) + +def main() : + if len(sys.argv) > 1 : + for module in sys.argv[1:] : + print {module : find_module_versions(module)} + else : + modules = find_modules() + for module in modules : + print {module : find_module_versions(module)} + +if __name__ == "__main__": + main() + +