Python smbstatus

במשך הרבה מאוד זמן חיפשתי דרך להציג את המידע שיוצא מsmbstatus בצורה קריאה יותר.
החלטתי פשוט לכתוב משהו בעצמי.
אחת הבעיות של smbstatus היא שהתוכנית מציגה את המחשבים המחוברים והקבצים הפתוחים ברשימות נפרדות, התוכנית שלמטה מאחדת אותן ומציגה את הרשימה בצורה נוחה וקריאה יותר

#!/usr/bin/python

import subprocess
import re
import string

SMBSTATUS       ="/usr/bin/smbstatus"
devnull         = open('/dev/null', 'w')
UsersList       =[]
FilesList       =[]
DirsList        =[]

# Prints out shares from an array in a readable format
def PrintShares(TitleArg,RunArg):
        print "\n"
        print "{0:20} {1:20} {2:80}".format("Username", "Share Name", TitleArg + "Path")
        print "=" * 100
        for x,y,z in RunArg:
                print "{0:20} {1:20} {2:80}".format(x, y, z)

# Read open shares (For computers)
ShareOutput = subprocess.check_output([SMBSTATUS, "-S"], stderr=devnull)

# Read open files
OpenFilesToFix = subprocess.check_output([SMBSTATUS, "-L"], stderr=devnull)

# Get a list of users & pids
for line in ShareOutput.split("\n"):
        if re.search('^[a-zA-Z0-9]', line):
                a = line.split(" ")
                b = filter(None,a)
                UsersList.append((b[1],b[2]))

# Replace pids in our open files list with computer names
for x,y in UsersList:
        OpenFilesToFix=OpenFilesToFix.replace(x,y)

# Filter out what we want (Who and where...)
for line in OpenFilesToFix.split("\n"):
        if ':' in line and not line.startswith('Locked files:'):
                a = line.split(" ")
                b = filter(None,a)
                c = string.join(b[7:])
                file_path = c[:-24] # Remove the date crap
                username  = b[0] # Create Username
                share = b[6] # Create Share name

                if '0x100081' in line or '0x81' in line:
                        DirsList.append((username, share, file_path))
                else:
                        FilesList.append((username, share, file_path))

# Print a nice output
PrintShares("File ",FilesList)
PrintShares("Directory ",DirsList)

print ""