Hallo zusammen,
ich hab seit Tagen ein kleines Problem mit meinem Python Skript. Nachdem ich nun so ziemlich jedes Forum fast jeden Beitrag abgeklappert habe, wende ich mich an euch
Ich hab ein Skript welches in der root crontab bei jedem reboot startet.
Ich habe aber in meinem Skript mehrere Schleifen und kann den Fehler auf ziemlich genau eine Zeile eingrenzen. Als nicht gelernter Programmierer, kenn ich natürlich nicht die verscheidenen Module von Python, aber ich vermute, dass das Problem hier liegt. Ich komm darauf, weil wenn das Skript im Hintergrund (mit-)startet, genau den while-Teil "falsch" macht..
[code=php]
#nach 2 Geräten suchen mit insgesamt maximal 5 Durchgängen
while (k <= 5) and (device1 == 0) and (device2 == 0):
print "%s: Suche Gerät1 ..." % datetime.datetime.now()
response1 = subprocess.check_output('/usr/bin/nmap -F **IP-ADRESSE** -Pn -sF | grep "host" | cut -d"(" -f2 | cut -d")" -f1 | cut -d" " -f1', shell=True)
device1 = int(response1)
if device1==1:
print "%s: Gerät 1: GEFUNDEN (%s. Versuch)" % (datetime.datetime.now(), k)
else:
print "%s: Gerät 1: keine Antwort (%s. Versuch)" % (datetime.datetime.now(), k)
print "%s: Suche Gerät 2 ..." % datetime.datetime.now()
response2 = subprocess.check_output('/usr/bin/nmap -F **IP-ADRESSE** -Pn -sF | grep "host" | cut -d"(" -f2 | cut -d")" -f1 | cut -d" " -f1', shell=True)
device2 = int(response2)
if device2==1:
print "%s: Gerät 2: GEFUNDEN (%s. Versuch)" % (datetime.datetime.now(), k)
else:
print "%s: Gerät 2: keine Antwort (%s. Versuch)" % (datetime.datetime.now(), k)
#zähler
k = k + 1
#ausführen, wenn keines der beiden Geräte erreichbar ist
if device1==0 and device2==0:
print "%s: KEIN GERÄT GEFUNDEN! Starte jetzt den TelegramBot" % datetime.datetime.now()
def handle(msg):
if 'text' in msg and msg['text'] == '/start':
with open('/usr/bin/id.txt', 'w') as f:
f.write(str(msg['chat']['id']))
bot = telepot.Bot('******')
bot.message_loop(handle)
print "%s: TelegramBot: Suche Empfänger-ID aus Liste ..." % datetime.datetime.now()
with open('/usr/bin/id.txt', 'r') as idfile:
chat_id=int(idfile.read())
bot.sendMessage(chat_id, "\n========================\nACHTUNG!\nJemand ist zuhause!")
print "%s: TelegramBot: Nachricht erfolgreich abgeschickt!" % datetime.datetime.now()
time.sleep(1)
print "%s: Warte 5 Minuten" % datetime.datetime.now()
time.sleep(300)
#wenn ein Gerät erreichbar ist
else:
print "%s: Kein Alarm! Mindestens ein Gerät wurde im Netzwerk gefunden" % datetime.datetime.now()
print "%s: Warte 5 Minuten" % datetime.datetime.now()
time.sleep(300)
[/php]
Was soll das Skript machen?
Es soll max. 5x nach 2 Geräten im gleichen Netzwerk sind suchen. Sobald eines erreichbar ist, zum nächsten Abschnitt springen. Der wäre dann (wenn kein Gerät erreichbar ist) das Verschicken einer Nachricht über Telegram bzw. Telepot (fehlerfrei).
Wie gesagt, ich bin kein Programmierer, aber ich schätze, dass es an diesen Zeilen liegt:
[code=php]response1 = subprocess.check_output('/usr/bin/nmap -F **IP-ADRESSE** -Pn -sF | grep "host" | cut -d"(" -f2 | cut -d")" -f1 | cut -d" " -f1', shell=True)
[...]
response2 = subprocess.check_output('/usr/bin/nmap -F **IP-ADRESSE** -Pn -sF | grep "host" | cut -d"(" -f2 | cut -d")" -f1 | cut -d" " -f1', shell=True)
[/php]
"Von Hand" im Terminal eingegeben, ergibt das genau immer den Wert 0 oder 1 (je nach Erreichbarkeit)..
Vielleicht könnt ihr mir dabei helfen und vielleicht den entscheidenden Tipp geben
Entschuldigt auch die evtl. vorhandenen kleinen Fehler. Hatte nur mal etwas Java und alles andere ausm Netz und probieren, probieren, probieren