Category: Python

  • Python Sample Script


    import re
    import ntpath
    import glob
    import subprocess

    # In order to get this tool to run correctly, you'll need python installed (duh!) and graphviz
    basedir = "/home/ronald-dev/allBashScript/"

    '''
    This function will scan a bash file, and look for any dependency to another bash file
    @param String The fileName
    @return Array The dependency filenames
    '''
    def readDependencies(fileName):
    f = open(fileName, 'r')
    content = f.read()
    occurences = {} # {file1.sh:1, file2.sh:1, file3.sh:1}
    for m in re.finditer('[\w|\/]*\.sh', content):
    word = ntpath.basename(content[m.start(): m.end()])
    # print str(m.start()) + " to " + str(m.end()) + ": " + word
    if word not in occurences:
    isComment = False
    index = m.start()
    while index > 0 and content[index] != "\n":
    if content[index] == "\"" or content[index] == "'" or content[index] == "#" :
    isComment = True
    break
    else:
    index = index-1

    if isComment == False:
    occurences[word]=1
    f.close()
    return occurences.keys()

    '''
    Scan one bash file and convert it dependencies to GraphViz notation
    @param String The fileName
    @param Array The dependency filenames
    @return String GraphViz notation "bash01.sh" -> "bash02.sh";[NEWLINE] etc
    '''
    def toGraphvizNotation(fileName, arrayOfDependencies):
    string = ""
    filename = ntpath.basename(fileName)
    for dependency in arrayOfDependencies:
    string += ' "' + filename + '" -> "' + dependency + "\";\n"

    return string

    '''
    Scans all bash file, with extension .sh
    @param String The directory to scan
    @return Array Array of filenames
    '''
    def readAllBashFiles(directory):
    return glob.glob(directory+"*.sh")

    '''
    Scan multiple bash files and convert their dependencies to GraphViz notation
    @param String The directory to scan
    @return String GraphViz notation "bash01.sh" -> "bash02.sh";[NEWLINE] etc
    '''
    def generateGraphVizFile(basedir):
    bashfiles = readAllBashFiles(basedir)
    #print bashfiles
    graphVizFileContent = ""

    for bashfile in bashfiles:
    graphVizFileContent += toGraphvizNotation(bashfile, readDependencies(bashfile))

    graphVizFileContent = "digraph G { \n"+ graphVizFileContent+ "}"
    # print graphVizFileContent;
    return graphVizFileContent

    '''
    Write to a content to a file
    @param String The filename to be written to
    @return String The content
    '''
    def writeGraphvizFile(filename, graphVizFileContent):
    f = open(filename, 'w')
    f.write(graphVizFileContent)
    f.close()

    writeGraphvizFile("/tmp/bashdependencies.dot", generateGraphVizFile(basedir))
    subprocess.call(["/usr/bin/dot", "-T", "svg", "-o", "/tmp/allBashScript.svg", "/tmp/bashdependencies.dot"])
    subprocess.call(["eog", "/tmp/allBashScript.svg"])