Feliz año, merry christmas y esas cosas que se dicen... Ya se que es un poco tarde pero es mi primera entrada del año y tenía que decirlo en algún momento. Tengo varias entradas entre manos y algunas de ellas dedicadas a scripts Python que estoy realizando.
En esta entrada voy a mostrar la actualización que he realizado del script TosCalc.py, descrito en esta entrada. En primer lugar le he cambiado el nombre porque el anterior no me convencía, he utilizado la variable self para almacenar todos los valores que se van calculando y un pequeño control de excepciones que controla los errores el script.
El script acepta solamente un argumento y éste debe ser un número entero (de tipo int), en caso de no pasar un número fallará salvo algunas excepciones siempre y cuando los valores estén comprendidos entre el 1 y el 7.
Sintaxis: ./QosCalc.py value
Código fuente:
#!/usr/bin/env python
#
# Name: QoSCalc.py
# Description: Calculate any QoS values through a IP Precedence or Class Selector
# Author: Brixton Cat
# Date: 19 Ene 2013
# Version: 1.0
# Sintax: ./QoSCalc.py value
#
### Dependencies
import sys
### tosCalc class
class qosCalc:
""" Class to calc any QoS values through a IP Precedence or
Class Selector """
def __init__(self, value):
""" Initializing qosCalc class """
self.value = value # Creating value variable
# Check value introduced
if value < 1 or value > 7:
print "[!] Error: Allow values it's from 1 to 7"
sys.exit(3) # Exit code: 3
def eightBits(self):
""" This function add 0s to right side of binary variable and calc their
decimal value """
self.tosb = self.dscpb + str(0) * 2 # Type of Service binary value
self.tosd = int(self.tosb, 2) # Type of Service decimal value
def main(self):
""" Main function """
calc.threeBits()
calc.sixBits()
calc.eightBits()
def results(self):
""" Prints values of the IP Precedence or Class Selectors argument """
# Header of table
print "Value 3bits DSCP Bin DSCP ToS Bin ToS"
print "----- ----- -------- ---- ------- ---"
# Values
print " %d\t%s\t%s\t %d\t%s %d" % \
(self.value, self.binary, self.dscpb, self.dscpd, self.tosb, self.tosd)
return sys.exit(0)
def sixBits(self):
""" This function add 0s to right side of binary variable and calculate
their decimal value """
self.dscpb = self.binary + str(0) * 3 # DSCP binary value
self.dscpd = int(self.dscpb, 2) # DSCP decimal value
def threeBits(self):
""" This function convert decimal argument to 3 bits value and check
correct lenght of this """
# If less of 3 bits, add 0s to left of binary variable
bina = bin(self.value).split('b') # Array ['0', 'value']
if bina[1] < "3":
rest = 3 - len(bina[1])
self.binary = str(0) * rest + bina[1]
else:
self.binary = bina[1]
### Script
if __name__ == "__main__":
try:
value = int(sys.argv[1]) # Check first argument
calc = qosCalc(value) # Initializing qosCalc class
calc.main() # Run main() function
calc.results() # Prints results
except IndexError: # Error: No argument
print "[!] Error: Any value defined"
sys.exit(1) # Exit code: 1
except ValueError: # Error: Bad arguments
print "[!] Error: Not valid Class Selector or IP Precedence value"
sys.exit(2) # Exit code: 2
#EOF
##FVE
Un saludo, Brixton Cat


No hay comentarios:
Publicar un comentario
Bienvenid= si quieres dejar un comentario