Python - ARGUMENTOS DENTRO PROGRAMA, COMO?

 
Vista:

ARGUMENTOS DENTRO PROGRAMA, COMO?

Publicado por Larusso (6 intervenciones) el 07/09/2007 14:27:30
Hola, tengo un programa que cuando lo llamo por consola le tengo que poner estos argumentos:

usage = 'Uso: %s [opciones] <agente snmp> <comunidad> <obj-id [[obj-id] ... ]\n' % sys.argv[0]

Cuando lo llamo queda asi: python codigo.py 192.168.1.x public 1.2.3.2.1.3.2.3.3

Como puedo hacer para que los <obj-id> , es decir, 1.2.3.2.1.3.2.3.3, quede definido dentro y no

haga falta pasarlo como argumento. Es decir, a que tengo que igualarlo dentro para que al ejecutar

el programa ya sepa cual es. Gracias por adelantado. Mi programa es este:

---------------------------------------------------------------------------------------------------------------------------

#!/usr/local/bin/python -O
"""
Script que usa la peticion SNMP v.1/v.2c GET para extraer uno o mas objetos SNMP de un agente
"""

import sys
import getopt
import time

# Importar modulos PySNMP
from pysnmp import asn1, v1, v2c
from pysnmp import role

# Inicializar mensajes de ayuda
options = 'Opciones:\n'
options = options + ' -p <port> puerto para comunicar con el agente. Por defecto el 161.\n'
options = options + ' -r <retries> numero de intentos a usar en las peticiones. Por defecto es 5.\n'
options = options + ' -t <timeout> tiempo entre intentos. Por defecto es 1.\n'
options = options + ' -v <version> version del protocolo SNMP a usar [1, 2c]. Por defecto es 1 (version uno).'
usage = 'Uso: %s [opciones] <agente snmp> <comunidad> <obj-id [[obj-id] ... ]\n' % sys.argv[0]
usage = usage + options

# Initializar valores por defecto
port = 161
retries = 5
timeout = 1
version = '2c'

# Analizar posibles opciones
try:
(opts, args) = getopt.getopt(sys.argv[1:], 'hp:r:t:v:',\
['help', 'port=', 'retries=', \
'timeout=', 'version='])

except getopt.error, why:
print 'getopt error: %s\n%s' % (why, usage)
sys.exit(-1)

try:
for opt in opts:
if opt[0] == '-h' or opt[0] == '--help':
print usage
sys.exit(0)

if opt[0] == '-p' or opt[0] == '--port':
port = int(opt[1])

if opt[0] == '-r' or opt[0] == '--retries':
retries = int(opt[1])

if opt[0] == '-t' or opt[0] == '--timeout':
timeout = int(opt[1])

if opt[0] == '-v' or opt[0] == '--version':
version = opt[1]

except ValueError, why:
print 'Parametro invalido \'%s\' para la opcion %s: %s\n%s' \
% (opt[1], opt[0], why, usage)
sys.exit(-1)

if len(args) < 2:
print 'Insuficiente numero de argumentos suministrados\n%s' % usage
sys.exit(-1)

# Creacion del objeto gestor SNMP (manager)
client = role.manager((args[0], port))

# Pasarle varias opciones
client.timeout = timeout
client.retries = retries

# Creacion de los objetos request&response SNMP de la
# version del protocolo especificada en el modulo
try:
req = eval('v' + version).GETREQUEST()
rsp = eval('v' + version).GETRESPONSE()

except (NameError, AttributeError):
print 'Version del protocolo SNMP no soportada: %s\n%s' % (version, usage)
sys.exit(-1)

print '\n\nMONITORIZACION SAI EN TIEMPO REAL'
print '----------------------------------\n\nHora actual | Sistema\n'

for set in range(1000000):
# Codificacion de OIDs, codificacion del mensaje de peticion SNMP y
# intento de enviarlo al agente y recibir una respuesta
(answer, src) = client.send_and_receive( \
req.encode(community=args[1], \
encoded_oids=map(asn1.OBJECTID().encode, args[2:])))

# Decodificacion de la respuesta SNMP
rsp.decode(answer)

# Asegurarse de que la respuesta es la peticion buscada (request IDs, communities, etc.)
if req != rsp:
raise 'Respuesta incorrecta: %s vs %s' % (str(req), str(rsp))

# Decodificacion BER de los objetos IDs codificados
oids = map(lambda x: x[0], map(asn1.OBJECTID().decode, \
rsp['encoded_oids']))

# Decodificacion BER de los valores codificados asociados con los objetos IDs
vals = map(lambda x: x[0](), map(asn1.decode, rsp['encoded_vals']))

# Consulta de fallo remoto del agente SNMP
if rsp['error_status']:
raise 'SNMP error #' + str(rsp['error_status']) + ' for OID #' \
+ str(rsp['error_index'])

# Impresion de resultados
for (oid, val) in map(None, oids, vals):
#print oid + ' ---> ' + str(val)
sys.stdout.write("%s " % val)
#sys.stdout.flush()
time.sleep(1)

sys.stdout.write("\r")
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder