|< Day Day Up >|
Recipe 1.11. Finding All of the Documentation for a Program
Use finddoc, that wonderful Python script that comes to you courtesy of the excellent Akkana Peck.
You can call it anything you like. Remember to make it executable:
$ chmod +x finddoc
Using it requires only the script name and the name of the program for which you need the documentation. For example:
$ ./finddoc grep /usr/share/doc/grep /usr/share/doc/grep-dctrl /usr/share/doc/grep-dctrl/changelog.gz ...
The output can be filtered through other commands, or redirected to a file:
$ ./finddoc | grep -i examples | lpr $ ./finddoc | grep -i faq $ ./finddoc | grep -i examples > python-examples.txt
1.11.3 Program: finddoc
#!/usr/bin/env python # Finddoc: A Script For Finding Linux Program Documentation # When making your own copy of this script, be sure to # preserve the leading spaces exactly as they are written # here, because Python needs them. # Search for documentation related to the given strings; # case-insensitive, and whole-word only. # Relies on "locate" and assumes that the locate # database is current. # # Copyright 2003 by Akkana Peck. # You may use, distribute or modify this program # under the terms of the GPL. import sys, os, string, re # This is the list of document-related filenames # to search for. You may edit this list as needed. # Be sure to add only lowercase names. docfilenames = [ "changelog", "readme", "install", "howto", "authors", "news", "todo", "config", "sample", "samples", "example", "examples", "ref", "guide", "manual", "quickstart", "thanks", "notes", "features", "faq", "acknowledgement", "bugs", "problems" ] def system_out (cmdstr) : retlist = [ ] fp = os.popen(cmdstr) while 1: s = fp.readline( ) if not s : break retlist.append(s) fp.close( ) return retlist # main( ) for arg in sys.argv : #print string.split(arg, " \t./") files = system_out("locate " + arg + " | grep -w " + arg); for path in files : #print path # Special case for anything with "man", "doc", or "info" in the path: if (string.find(path, "/man") >= 0) \ or (string.find(path, "/doc") >= 0) \ or (string.find(path, "/info") >= 0) : print path, ) continue # Now see if it matches any of the docfilenames: base = os.path.basename(path) for nam in docfilenames : if base = = "" : continue # Non full word search would use this: : # Full-word-search: # Make a regexp to search for nam as full-word only pat = "^" + nam + "$" if (re.compile(nam).search(base, 1)) : print path, base = "" continue
1.11.4 See Also
|< Day Day Up >|