Python - Snmpwalk
Python - Snmpwalk
Bonsoir à tous,
Je me heurte à un soucis de scripts.
Déjà mon script:
[cpp]#!/usr/bin/env python
import subprocess
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
count = 0
len = 0
for line in first.splitlines():
len += 1
while count != len:
uno = first.splitlines()[count]
tres = third.splitlines()[count]
count += 1
print ("{0}").format(uno)
print ("{0}").format(tres)
command = "snmpwalk -v 1 -c public -OevQ 172.17.0.4 {0}".format(tres)
print ("{0}").format(command)
snmp = subprocess.Popen([
'snmpwalk',
'-v', '1',
'-c', 'public',
'-OevQ',
'172.17.0.4', '{0}'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().format(tres)
print ("{0}").format(snmp)[/cpp]
La source, un fichier avec des mib dedans de ce style:
[cpp]rPDU 1.3.6.1.4.1.318.1.1.12
rPDUIdent rPDUIdent 1.3.6.1.4.1.318.1.1.12.1
rPDUIdentName rPDUIdentName 1.3.6.1.4.1.318.1.1.12.1.1
rPDUIdentDeviceNumBreakers rPDUIdentDeviceNumBreakers 1.3.6.1.4.1.318.1.1.12.1.10
rPDUIdentDeviceBreakerRating rPDUIdentDeviceBreakerRating 1.3.6.1.4.1.318.1.1.12.1.11[/cpp]
Le but du script? parcourir toute les mib, faire le snmpwalk, coller la valeur dans un tableau puis écrire ce tableau dans un fichier.
Le problème:
Les commandes cat fonctionnent mais pas le snmpwalk, ca me renvoie une ligne blanche.
Une idée du soucis?
Merci
Je me heurte à un soucis de scripts.
Déjà mon script:
[cpp]#!/usr/bin/env python
import subprocess
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
count = 0
len = 0
for line in first.splitlines():
len += 1
while count != len:
uno = first.splitlines()[count]
tres = third.splitlines()[count]
count += 1
print ("{0}").format(uno)
print ("{0}").format(tres)
command = "snmpwalk -v 1 -c public -OevQ 172.17.0.4 {0}".format(tres)
print ("{0}").format(command)
snmp = subprocess.Popen([
'snmpwalk',
'-v', '1',
'-c', 'public',
'-OevQ',
'172.17.0.4', '{0}'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().format(tres)
print ("{0}").format(snmp)[/cpp]
La source, un fichier avec des mib dedans de ce style:
[cpp]rPDU 1.3.6.1.4.1.318.1.1.12
rPDUIdent rPDUIdent 1.3.6.1.4.1.318.1.1.12.1
rPDUIdentName rPDUIdentName 1.3.6.1.4.1.318.1.1.12.1.1
rPDUIdentDeviceNumBreakers rPDUIdentDeviceNumBreakers 1.3.6.1.4.1.318.1.1.12.1.10
rPDUIdentDeviceBreakerRating rPDUIdentDeviceBreakerRating 1.3.6.1.4.1.318.1.1.12.1.11[/cpp]
Le but du script? parcourir toute les mib, faire le snmpwalk, coller la valeur dans un tableau puis écrire ce tableau dans un fichier.
Le problème:
Les commandes cat fonctionnent mais pas le snmpwalk, ca me renvoie une ligne blanche.
Une idée du soucis?
Merci
Python - Snmpwalk
ça renvoie quoi snmpwalk ?
Python - Snmpwalk
avec la ligne:
rPDUIdentDevicePowerWatts rPDUIdentDevicePowerWatts 1.3.6.1.4.1.318.1.1.12.1.16
ca me renvoie un chiffre unique, 368
rPDUIdentDevicePowerWatts rPDUIdentDevicePowerWatts 1.3.6.1.4.1.318.1.1.12.1.16
ca me renvoie un chiffre unique, 368
Python - Snmpwalk
Ces lignes :
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
c'est vraiment dans le code ou c'est pour cacher quelque chose ? Vous parsez des champs avec des espaces avec un fork, un cat et un awk alors que c'est un prog en python ? Rassures moi c'est pas vrai

Pour ton problème, est-ce que dans '{0}' le {0} est remplacé alors qu'il est dans les ' ' ? Souvent dans les langages, les variables ne sont pas remplacées dans les simples quotes mais seulement dans les doubles quote. Je n'ai pas fait de python depuis longtemps je ne m'en souviens plus.
PS : et ça
for line in first.splitlines():
len += 1
y a pas un len = first.splitlines().count() ? ou un truc du genre ?
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
c'est vraiment dans le code ou c'est pour cacher quelque chose ? Vous parsez des champs avec des espaces avec un fork, un cat et un awk alors que c'est un prog en python ? Rassures moi c'est pas vrai


Pour ton problème, est-ce que dans '{0}' le {0} est remplacé alors qu'il est dans les ' ' ? Souvent dans les langages, les variables ne sont pas remplacées dans les simples quotes mais seulement dans les doubles quote. Je n'ai pas fait de python depuis longtemps je ne m'en souviens plus.
PS : et ça
for line in first.splitlines():
len += 1
y a pas un len = first.splitlines().count() ? ou un truc du genre ?

Python - Snmpwalk
Je crois que j'ai trouvé
ici
tu es censé remplacé {0} par la valeur de tres si j'ai bien compris la doc de format() => https://docs.python.org/2/library/string.html
hors, je pense qu'ici le format se fera sur le résultat ou tout du moins sur l'objet Popen, et non sur ce qui est passé en paramètre.
Et puis alors je ne dirais rien sur les noms des variables
Le script est pas tip-top
(pas de commentaires, boucles pour rien, algo pas super logique) 
ici
Code : Tout sélectionner
snmp = subprocess.Popen([
'snmpwalk',
'-v', '1',
'-c', 'public',
'-OevQ',
'172.17.0.4', '{0}'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().format(tres)
hors, je pense qu'ici le format se fera sur le résultat ou tout du moins sur l'objet Popen, et non sur ce qui est passé en paramètre.
Et puis alors je ne dirais rien sur les noms des variables

Le script est pas tip-top


Python - Snmpwalk
alors déjà merci pour le coup de main.
Niveau algo pas super logique, je m'en fou pour l'instant. Ce que je veux c'est que ca marche, que j'ai les bonnes commandes, puis je remets en forme.
Pour les deux premières lignes, si elles sont comme ca, c'est plus galère de faire du parsing de fichier avec python que comme ca. c'est peut être pas la meilleure technique mais pour un script qui va servir 15jours je m'en fou
Niveau algo pas super logique, je m'en fou pour l'instant. Ce que je veux c'est que ca marche, que j'ai les bonnes commandes, puis je remets en forme.
Pour les deux premières lignes, si elles sont comme ca, c'est plus galère de faire du parsing de fichier avec python que comme ca. c'est peut être pas la meilleure technique mais pour un script qui va servir 15jours je m'en fou

Python - Snmpwalk
Tiens voilà une version propre qu'un ami qui adore le python t'as écris 
https://gist.github.com/killruana/9102252597ca631b00a0

https://gist.github.com/killruana/9102252597ca631b00a0
Python - Snmpwalk
j'aime le python mais j'en fais pas assez régulièrement pour augmenter mon level significativement :/
merci à lui (c'est Mr?
) je testerais ca à midi ^^
merci à lui (c'est Mr?

Python - Snmpwalk
Oui c'est monsieurj'aime le python mais j'en fais pas assez régulièrement pour augmenter mon level significativement :/
merci à lui (c'est Mr?) je testerais ca à midi ^^

Python - Snmpwalk
hé bien grand merci à lui 

Python - Snmpwalk
va falloir que je rajoute la fin car la ca affiche rien par exemple 

Python - Snmpwalk
en effet ça n'affiche rien là mais c'est pas trop dur de rajouter des print ^^
D'ailleurs, faire print("{0}").format(variable) c'est pas top, autant faire print(variable) ^^
print().format() ça sert un peu comme le printf si tu veux mettre du texte autour des variables et concaténer le tout. Genre print("Le résultat est {0} .").format(variable)
D'ailleurs, faire print("{0}").format(variable) c'est pas top, autant faire print(variable) ^^
print().format() ça sert un peu comme le printf si tu veux mettre du texte autour des variables et concaténer le tout. Genre print("Le résultat est {0} .").format(variable)
Python - Snmpwalk
ouaip effectivement ^^
je gère les prints
par contre, la variable out est toujours nul donc le code est peut être plus beau/propre mais ca juste pas marche
(merci à lui hein joke tout ca
)
edit: le print(err) c'est le bien
je gère les prints

par contre, la variable out est toujours nul donc le code est peut être plus beau/propre mais ca juste pas marche

(merci à lui hein joke tout ca

edit: le print(err) c'est le bien

Python - Snmpwalk
tu as quelque chose dans err ?
Python - Snmpwalk
ouaip:
rPDUIdentDevicePowerWatts
1.3.6.1.4.1.318.1.1.12.1.16
No hostname specified.
et le help de snmpwalk ^^
bizarre car la commande à la main fonctionne
rPDUIdentDevicePowerWatts
1.3.6.1.4.1.318.1.1.12.1.16
No hostname specified.
et le help de snmpwalk ^^
bizarre car la commande à la main fonctionne
Python - Snmpwalk
Mauvaise interprétation, c'est pas "Mon" monsieur, c'est juste un monsieur, c'est pas une madame
Oui c'est monsieur

Python - Snmpwalk
hey t'as vu que dans ton exemple y avait que 2 champs à la première ligne ?
Python - Snmpwalk
ouaip mais cette ligne je m'en fou 
